ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjYwYTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlXyouemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzI3MGQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZmZjNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDk4NTAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAotQXByaWwgMTQsIDIwMTBcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCi1FY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAotdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKLXByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAotICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1Qcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCi1VcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKLXRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKLWdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1cblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLVxuXAotVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAotYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKLXRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAotb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCi10aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKLUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCi1cblwKLVlvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKLVlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAotSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLWluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKLW1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCi1hZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCi1cblwKLSAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCi0gICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCi0gICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKLSAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCi0gICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCi0gICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKLSAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAotICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCi0gICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCi0gICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAotICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAotICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKLSAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKLXJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmNjMTY3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjIuMy5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg0Y2EzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkFwcmlsIDE0LCAyMDEwPC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLQotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgotCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQotICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLSAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4KLQotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLSAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLSAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0KLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0gICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLSAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0gICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLSAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotPC91bD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi0KLTxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQotICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCi0gICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bwotICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQotICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+Ci0gICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgotCi08cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCi0gICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKLSAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCi0gICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+Ci0KLTxvbD4KLSAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5Ci0gICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCi0gICAgICAgcHJvZHVjdC48L2xpPgotICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCi0gICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KLSAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCi0gICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAotICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KLSAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAotICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Ci08L29sPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLQotPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWM5OWQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZV8xLjAuMC5iaW4uZGlzdC56aXAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZmMzI4Ny4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FmZmM1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNjMGZlYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFhNTCBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBYTUwgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAotQXByaWwgMTQsIDIwMTBcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCi1FY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAotdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKLXByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAotICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1Qcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCi1VcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKLXRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKLWdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1cblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLVxuXAotVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAotYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKLXRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAotb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCi10aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKLUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCi1cblwKLVlvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKLVlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAotSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLWluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKLW1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCi1hZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCi1cblwKLSAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCi0gICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCi0gICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKLSAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCi0gICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCi0gICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKLSAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAotICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCi0gICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCi0gICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAotICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAotICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKLSAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKLXJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjliM2I1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjIuMi5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODRjYTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+QXByaWwgMTQsIDIwMTA8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+Ci0KLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCi0gICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0gICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0gICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPgotCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0gICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0gICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0gICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLSAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLSAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci08L3VsPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLQotPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCi0gICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKLSAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCi0gICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCi0gICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KLSAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+Ci0KLTxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKLSAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQotICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKLSAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KLQotPG9sPgotICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKLSAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKLSAgICAgICBwcm9kdWN0LjwvbGk+Ci0gICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKLSAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgotICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKLSAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0Ci0gICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgotICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCi0gICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KLTwvb2w+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotCi08cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjgyYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1qc3BlbmNvZGluZ3Rlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTYxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjNDFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDoganNwZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjg3OGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGpzcGVuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODIwNzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBKU1AgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwOTdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQOwotCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117SlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkZWNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Nzc3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJdHJ5IHsKLQkJCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdGRlZmVjdDQyMDV3cHNqc3AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZGVmZWN0XzQyMDVfd3BzLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwKLQkgKiBpdCBhcHBlYXJzIGluY29ycmVjdCAoZHVlIHRvIGZvbnQgcHJvYmxlbXMgaW4gY29uc29sZSkuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RVVEYxNi5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICogTm90ZTogVVRGLTE2ID09IFVURi0xNkJFCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIjsKLQkJLy8gWzIyODM2Nl0gRW5jb2RpbmcgY2hhbmdlczogRm9yIFVURi0xNiB3aXRoIEJPTSwgdGhlIGV4cGVjdGVkIHNob3VsZCBiZSBVVEYtMTYKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2V2l0aEphcGFuZXNlQ2hhcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGODNCeXRlQk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlWG1sU3R5bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZV94bWxTdHlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBhZTgwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZDaGFyc2V0OwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZTsKLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImpzcC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZkxhbmd1YWdlOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJZG9UZXN0RmlsZShKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpLCBleHBlY3RlZE5hbWUsIGZpbmFsVG9rZW5UeXBlLCBleHBlY3RlZENvbnRlbnRUeXBlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyJcIiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoUmVhZGVyIGZpbGVSZWFkZXIsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCXRva2VuaXplciA9IG5ldyBKU1BIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBwYXJzZUhlYWRlcih0b2tlbml6ZXIpOwotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCk7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCi0JCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRWYWx1ZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUpKTsKLQkJfQotCi0JCVN0cmluZyBmb3VuZENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGUoKTsKLQkJaWYgKGV4cGVjdGVkQ29udGVudFR5cGUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gY29udGVudFR5cGUsIGJ1dCBmb3VuZDogIiArIGZvdW5kQ29udGVudFR5cGUsIGZvdW5kQ29udGVudFR5cGUgPT0gbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICIgYnV0IGZvdW5kICIgKyBmb3VuZENvbnRlbnRUeXBlLCBleHBlY3RlZENvbnRlbnRUeXBlLmVxdWFscyhmb3VuZENvbnRlbnRUeXBlKSk7Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04Iik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RkZWZlY3QyMjMzNjUoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlNlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8qKgotCSAqIHJldHVybnMgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHByaW9yaXR5OiAxLiBYTUwgRGVjbGFyYXRpb24gMi4gcGFnZQotCSAqIGRpcmVjdGl2ZSBwYWdlRW5jb2RpbmcgbmFtZSAzLiBwYWdlIGRpcmVjdGl2ZSBjb250ZW50VHlwZSBjaGFyc2V0IG5hbWUKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JCWVsc2UgaWYgKGZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKQotCQkJcmVzdWx0ID0gZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQllbHNlIGlmIChmQ2hhcnNldCAhPSBudWxsKQotCQkJcmVzdWx0ID0gZkNoYXJzZXQ7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKSB7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpcyBpbgotCSAqIEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCS8qCi0JCSAqIEJhc2VkIHBhcnRpYWxseSBvbgotCQkgKiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXJJbXBsCi0JCSAqIC5nZXRNaW1lVHlwZUZyb21Db250ZW50VHlwZVZhbHVlKFN0cmluZykgLCBkaXZpZGVzIHRoZSBmdWxsIHZhbHVlCi0JCSAqIGludG8gc2VnbWVudHMgYWNjb3JkaW5nIHRvICc7JywgYXNzdW1lcyB0aGUgZmlyc3Qgc3BlY2lmaWVzIHRoZQotCQkgKiBjb250ZW50IHR5cGUgaXRzZWxmIGlmIGl0IGhhcyBubyAnPScsIGFuZCB0aGF0IHRoZSByZW1haW5kZXIgYXJlCi0JCSAqIHBhcmFtZXRlcnMgd2hpY2ggbWF5IHNwZWNpZnkgYSBjaGFyc2V0Ci0JCSAqLwotCQkKLQkJU3RyaW5nIGNsZWFuQ29udGVudFR5cGVWYWx1ZSA9IFN0cmluZ1V0aWxzLnN0cmlwTm9uTGV0dGVyRGlnaXRzKGNvbnRlbnRUeXBlKTsKLQkJLyogQnJlYWsgdGhlIG1pbWUgaGVhZGVyIGludG8gdGhlIG1haW4gdmFsdWUgYW5kIGl0cyBwYXJhbWV0ZXJzLCBzZXBhcmF0ZWQgYnkgJzsnICovCi0JCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNsZWFuQ29udGVudFR5cGVWYWx1ZSwgIjsiKTsgLy8kTk9OLU5MUy0xJAotCQlpbnQgdExlbiA9IHRva2VuaXplci5jb3VudFRva2VucygpOwotCQlpZiAodExlbiA9PSAwKQotCQkJcmV0dXJuOwotCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nW3RMZW5dOwotCQlpbnQgaiA9IDA7Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQl0b2tlbnNbal0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JCQlqKys7Ci0JCX0KLQkJCi0JCWludCBmaXJzdFBhcmFtZXRlciA9IDA7Ci0JCWlmICh0b2tlbnNbMF0uaW5kZXhPZignPScpID09IC0xKSB7Ci0JCQkvKgotCQkJICogbm8gZXF1YWwgc2lnbiBpbiB0aGUgZmlyc3Qgc2VnbWVudCwgc28gYXNzdW1lIGl0IGluZGljYXRlcyBhCi0JCQkgKiBjb250ZW50IHR5cGUgcHJvcGVybHkKLQkJCSAqLwotCQkJZkNvbnRlbnRUeXBlID0gdG9rZW5zWzBdLnRyaW0oKTsKLQkJCWZpcnN0UGFyYW1ldGVyID0gMTsKLQkJfQotCQkvKgotCQkgKiBub3cgaGFuZGxlIHBhcmFtZXRlcnMgYXMgbmFtZT12YWx1ZSBwYWlycywgbG9va2luZyBmb3IgImNoYXJzZXQiCi0JCSAqIHNwZWNpZmljYWxseQotCQkgKi8KLQkJUGF0dGVybiBlcXVhbFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxccyo9XFxzKiIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSBmaXJzdFBhcmFtZXRlcjsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nW10gcGFpciA9IGVxdWFsUGF0dGVybi5zcGxpdCh0b2tlbnNbaV0pOwotCQkJaWYgKHBhaXIubGVuZ3RoIDwgMikKLQkJCQljb250aW51ZTsKLQkJCWlmIChwYWlyWzBdLnRyaW0oKS5lcXVhbHMoImNoYXJzZXQiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJZkNoYXJzZXQgPSBwYWlyWzFdLnRyaW0oKTsKLQkJCX0KLQkJfQotCi0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCWZDaGFyc2V0ID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlVmFsdWUgPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gZmluYWxUb2tlbiA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQotCQkJaWYoY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKHRva2VuVHlwZSkpIHsKLQkJCQkKLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBYTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlhNTERlbEVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZYTUxEZWNFbmNvZGluZ05hbWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmUGFnZUVuY29kaW5nVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VDb250ZW50VHlwZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmQ29udGVudFR5cGVWYWx1ZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUxhbmd1YWdlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZMYW5ndWFnZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJaWYgKGZDb250ZW50VHlwZVZhbHVlICE9IG51bGwpIHsKLQkJCXBhcnNlQ29udGVudFR5cGVWYWx1ZShmQ29udGVudFR5cGVWYWx1ZSk7Ci0JCX0KLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbShTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGODNCeXRlQk9NKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mQ2hhcnNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZCRSB8fCB0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJY2FuSGFuZGxlQXNVbmljb2RlID0gdHJ1ZTsKLQkJCXRoaXMuZkNoYXJzZXQgPSAiVVRGLTE2IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBjYW5IYW5kbGVBc1VuaWNvZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2UuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1pbmltYWxQYWdlRGlyZWN0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJtaW5pbWFsUGFnZURpcmVjdGl2ZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDIuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTgiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vUGFnZURpcmVjdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsUGFnZURpcmVjdGl2ZVdpdGhYTUxEZWNsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbENhc2VXaXRoTmVpdGhlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2hhcnNldCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0zIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0JCi0JLyoKLQkJc3VuLmlvLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uCi0JCWF0IHN1bi5pby5CeXRlVG9DaGFyVVRGOC5jb252ZXJ0KEJ5dGVUb0NoYXJVVEY4LmphdmE6MjYyKQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuY29udmVydEludG8oU3RyZWFtRGVjb2Rlci5qYXZhOjMxNCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozNjQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2Rlci5yZWFkKFN0cmVhbURlY29kZXIuamF2YToyNTApCi0JCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjIxMikKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXIuenpSZWZpbGwoSlNQSGVhZFRva2VuaXplci5qYXZhOjM1OSkKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXIucHJpbUdldE5leHRUb2tlbihKU1BIZWFkVG9rZW5pemVyLmphdmE6NTk4KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplci5nZXROZXh0VG9rZW4oSlNQSGVhZFRva2VuaXplci5qYXZhOjI1NCkKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQSGVhZFRva2VuaXplclRlc3Rlci5wYXJzZUhlYWRlcihKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTgyKQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjU4KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyLnRlc3RVVEYxNkJPTShKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MzI0KQotCSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLypTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLQkJWmlwcGVkVGVzdCB0ZXN0ID0gbmV3IFppcHBlZFRlc3QoKTsKLQkJdGVzdC5zZXRVcCgpOwotCQlJRmlsZSBmaWxlID0gdGVzdC5nZXRGaWxlKGZpbGVuYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlLmdldExvY2F0aW9uVVJJKCkuZ2V0UGF0aCgpKTsKLQkJZG9UZXN0RmlsZShmaWxlUmVhZGVyLCAiVVRGLTE2IiwgbnVsbCwgbnVsbCk7Ci0JCXRlc3Quc2h1dERvd24oKTsqLwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZVhtbFN0eWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlX3htbFN0eWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0JCXJldHVybiBmTGFuZ3VhZ2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzMjE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbiwgU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZENvbnRlbnRUeXBlLCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCQkKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZ2V0VGVzdFByb2plY3QoKS5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCi0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oZmlsZSk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShmaWxlKTsKLQotCQlTdHJpbmcgc3RyZWFtSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQotCQljaGVja1Jlc3VsdHMoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSwgc3RyZWFtSlNQQ29udGVudFR5cGUpOwotCQkKLQkJCi0JCVN0cmluZyBmaWxlSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSk7Ci0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBmaWxlSlNQQ29udGVudFR5cGUpOwotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRzKFN0cmluZyBleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBTdHJpbmcgZm91bmRKU1BDb250ZW50VHlwZSkgewotCQlpZiAoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBjb250ZW50VHlwZSwgYnV0IGZvdW5kOiAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZm91bmRKU1BDb250ZW50VHlwZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZEpTUENvbnRlbnRUeXBlICsgIiBidXQgZm91bmQgIiArIGZvdW5kSlNQQ29udGVudFR5cGUsIGV4cGVjdGVkSlNQQ29udGVudFR5cGUuZXF1YWxzKGZvdW5kSlNQQ29udGVudFR5cGUpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIG5vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2bGUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ2OTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLSAgICA8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgCi0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iJHt0ZXN0VHlwZX0iCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCQkgICAgCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZGJkNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgYnVmZmVyPSJub25lIiAlPg0KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGxkL2VuZ2luZS50bGQiIHByZWZpeD0id3BzIiAlPg0KLTx3cHM6Y29uc3RhbnRzLz4NCi0NCi08dGFibGU+DQotPHRyPjx0ZD48aW1nIGFsdD0iIiB0aXRsZT0iIiBzcmM9JzwlPSB3cHNCYXNlVVJMICU+L2ltYWdlcy93ZWxjb21lXzUuZ2lmJyBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiAvPjwvdGQ+PC90cj4NCi08dHI+PHRkPg0KLTxzcGFuIGNsYXNzPSJ3cHNUaW55VGV4dCI+PGI+PCU9IFZlcnNpb24uU0VSVkVSX05BTUUgJT4gPCU9IFZlcnNpb24uU0VSVkVSX1ZFUlNJT04gJT48L2I+PGJyLz4NCi3lu7rnva7lsaTmrKHvvJo8JT0gVmVyc2lvbi5CVUlMRF9OVU1CRVIgJT4gPCU9IFZlcnNpb24uQlVJTERfREFURSAlPiA8JT0gVmVyc2lvbi5CVUlMRF9USU1FICU+PGJyLz4NCi08YnIvPg0KLUxpY2Vuc2VkIE1hdGVyaWFscyAtIFByb3BlcnR5IG9mIElCTTxici8+DQotPCU9IFZlcnNpb24uUFJPRFVDVF9OVU1CRVIgJT48YnIvPg0KLShDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDwlPSBDb3B5cmlnaHQuWUVBUlMgJT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3NwYW4+PC90ZD48L3RyPg0KLTwvdGFibGU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhMjJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+DQotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY3OTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIA0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0zIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjI4N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ODY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08JQ0KLVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOw0KLSU+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMGEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJmOTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVjMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz1VVEYtOCANCi08dGVzdD4NCi08L3Rlc3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2QwYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgICAgPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDE3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4NCi0NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTBjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHRlc3Q+DQotIDwlQCBwYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4NCi0NCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotPC90ZXN0Pg0KLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMmM0MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0YzlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcyMzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3M2NiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzJmMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU4NjBiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS9jc3MvKiovKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL3czYy9kb20vc3R5bGVzaGVldHMvKiovKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllOWVlZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotdGVtcC5mb2xkZXIKLWNzc2NvcmV0ZXN0cy5qYXIKLWphdmFDb21waWxlci5jc3Njb3JldGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3OTdkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYTkxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAyLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogY3NzY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLkNTU0NvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdC50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudGVzdGZpbGVzLnJlc3VsdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZjM4OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBjc3Njb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLwotamFycy5jb21waWxlLm9yZGVyID0gY3NzY29yZXRlc3RzLmphcgotc291cmNlLmNzc2NvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzY29yZXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2ZmM3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IENTUyBDb3JlIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjMzVjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NBbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQuVGVzdENsZWFudXBQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdC5UZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NDaGFyc2V0UnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU0ZvbnRGYWNlUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU0ZvbnRGYW1pbHlUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NJbXBvcnRSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTTWVkaWFSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTTWV0YU1vZGVsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTUGFnZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NTdHlsZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NTdHlsZVNoZWV0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuVGVzdENTU0RlY2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTZWxlY3RvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTb3VyY2VQYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVGV4dFBhcnNlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NVcmxUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zdHlsZXNoZWV0cy5TdHlsZVNoZWV0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudGVzdGZpbGVzLkNTU01vZGVsTG9hZFRlc3Q7Ci0KLQotcHVibGljIGNsYXNzIENTU0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlNTRSBNb2RlbCBDU1MgVGVzdHMiKTsKLQotCQlhZGRTb3VyY2VUZXN0cyhzdWl0ZSk7Ci0JCWFkZE1vZGVsVGVzdHMoc3VpdGUpOwotCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0eWxlU2hlZXRUZXN0LmNsYXNzKTsKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgYWRkU291cmNlVGVzdHMoVGVzdFN1aXRlIHN1aXRlKSB7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTb3VyY2VQYXJzZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1RleHRQYXJzZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1NlbGVjdG9yVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NVcmxUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZE1vZGVsVGVzdHMoVGVzdFN1aXRlIHN1aXRlKSB7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTdHlsZVNoZWV0VGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NDaGFyc2V0UnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTSW1wb3J0UnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU3R5bGVSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NNZWRpYVJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1BhZ2VSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NGb250RmFjZVJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0ZvbnRGYW1pbHlUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RGb3JtYXRQcm9jZXNzb3JDU1MuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdENsZWFudXBQcm9jZXNzb3JDU1MuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdENTU0RlY2wuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTTW9kZWxMb2FkVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NNZXRhTW9kZWxUZXN0LmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmFkNmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmVuY29kaW5nLkNTU0RvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5DU1NDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9JREVOVElGSUVSLCAiMiIpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuVEFCKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKG5vZGUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuV1JBUFBJTkdfT05FX1BFUl9MSU5FKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUludChub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfUFJPUEVSVFlfTkFNRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUludChJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXRJbnQocHJlZktleSwgLTk5OSk7Ci0JCWludCBleHBlY3RlZFZhbHVlID0gLTg4ODsKLQkJbm9kZS5wdXRJbnQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWludCBmb3VuZFZhbHVlID0gbm9kZS5nZXRJbnQocHJlZktleSwgLTk5OSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKG9yaWdpbmFsVmFsdWUgPT0gLTk5OSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dEludChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJU3RyaW5nIGdhdGV3YXlEZWxpbWl0ZXIgPSBwcmVmcy5nZXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygiQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzIGFuZCBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheSBwcmVmZXJlbmNlcyBkbyBub3QgbWF0Y2giLCBnYXRld2F5RGVsaW1pdGVyLCBwcmVmZXJyZWREZWxpbWl0ZXIpOwotCi0JCS8vIHNldCBhIHBhcnRpY3VsYXIgbGluZSBkZWxpbWl0ZXIKLQkJcHJlZnMucHV0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkxGKTsKLQotCQkvLyBjcmVhdGUgZG9jdW1lbnQKLQkJQ1NTRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiNDdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIENvcmUgVGVzdHMiKTsKLQotCQlhZGRUZXN0KENTU0FsbFRlc3RzLnN1aXRlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWRjNTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvLyBSZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQ1NTQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NNb2RlbFRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0NvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMTc0NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLQotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQotCS8qKgotCSAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSAtCi0JICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdAotCSAqIEBwYXJhbSBsb2NhdGlvbiAtCi0JICogICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHByb2plY3QsIG9yIG51bGwgaWYgdGhlIGRlZmF1bHQgb2YKLQkgKiAgICAgICAgICAgICIvbmFtZSIgd2l0aGluIHRoZSB3b3Jrc3BhY2UgaXMgdG8gYmUgdXNlZAotCSAqIEBwYXJhbSBuYXR1cmVJZHMgLQotCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgbmF0dXJlcyBJRHMgdG8gc2V0IG9uIHRoZSBwcm9qZWN0LCBudWxsIGlmIG5vbmUKLQkgKiAgICAgICAgICAgIHNob3VsZCBiZSBzZXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBDU1NDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsKLQkJfQotCX0KLQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IENTU0NvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIgKGVnLgotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aAotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlIChlZy4KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdENsZWFudXBQcm9jZXNzb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU1M2M3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdENsZWFudXBQcm9jZXNzb3JDU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5DU1NDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNTU0NsZWFudXBTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DU1NDbGVhbnVwU3RyYXRlZ3lJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNsZWFudXBQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2xlYW51cFByb2Nlc3NvckNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGXzggPSAiVVRGLTgiOwotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgQ2xlYW51cFByb2Nlc3NvckNTUyBmQ2xlYW51cFByb2Nlc3NvcjsKLQotCXByaXZhdGUgYm9vbGVhbiBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZjsKLQlwcml2YXRlIGludCBmT2xkTWF4TGluZVdpZHRoUHJlZjsKLQlwcml2YXRlIFN0cmluZyBmT2xkSW5kZW50YXRpb25DaGFyUHJlZjsKLQlwcml2YXRlIGludCBmT2xkSW5kZW50YXRpb25TaXplUHJlZjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHNldCB1cCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCWZPbGRDbGVhckJsYW5rTGluZXNQcmVmID0gcHJlZnMuZ2V0Qm9vbGVhbihDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCWZPbGRNYXhMaW5lV2lkdGhQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JCWZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmID0gcHJlZnMuZ2V0U3RyaW5nKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUik7Ci0JCWZPbGRJbmRlbnRhdGlvblNpemVQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0KLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMsIGZhbHNlKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRILCA3Mik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5UQUIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUsIDEpOwotCi0JCWZDbGVhbnVwUHJvY2Vzc29yID0gbmV3IENsZWFudXBQcm9jZXNzb3JDU1MoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSBvbGQgcHJlZmVyZW5jZXMKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIGZPbGRNYXhMaW5lV2lkdGhQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBmT2xkSW5kZW50YXRpb25DaGFyUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgZk9sZEluZGVudGF0aW9uU2l6ZVByZWYpOwotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdENsZWFudXBQcm9jZXNzb3JDU1MpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFudXBBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWZDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChiZWZvcmVNb2RlbCk7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBjbGVhbmVkdXBCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoY2xlYW5lZHVwQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBjbGVhbnVwIHByb2Nlc3NvcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGNsZWFuZWR1cENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhjbGVhbmVkdXBCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJDbGVhbnVwIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQiLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihjbGVhbmVkdXBDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTY2OTA5dXJsQ2FzZUNsZWFudXAoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBzZXQgdXAgY2xlYW51cCBwcmVmZXJlbmNlcyBmb3IgdGhpcyB0ZXN0Ci0JCUNTU0NsZWFudXBTdHJhdGVneSBjdXJyZW50U3RyYXRlZ3kgPSBDU1NDbGVhbnVwU3RyYXRlZ3lJbXBsLmdldEluc3RhbmNlKCk7Ci0JCXNob3J0IG9sZENhc2VJZGVudGlmaWVyID0gY3VycmVudFN0cmF0ZWd5LmdldElkZW50Q2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlUHJvcGVydHlOYW1lID0gY3VycmVudFN0cmF0ZWd5LmdldFByb3BOYW1lQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlUHJvcGVydHlWYWx1ZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wVmFsdWVDYXNlKCk7Ci0JCXNob3J0IG9sZENhc2VTZWxlY3RvciA9IGN1cnJlbnRTdHJhdGVneS5nZXRTZWxlY3RvclRhZ0Nhc2UoKTsKLQkJYm9vbGVhbiBvbGRGb3JtYXRTb3VyY2UgPSBjdXJyZW50U3RyYXRlZ3kuaXNGb3JtYXRTb3VyY2UoKTsKLQkJYm9vbGVhbiBvbGRGb3JtYXRRdW90ZSA9IGN1cnJlbnRTdHJhdGVneS5pc1F1b3RlVmFsdWVzKCk7Ci0KLQkJY3VycmVudFN0cmF0ZWd5LnNldElkZW50Q2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcE5hbWVDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRQcm9wVmFsdWVDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRTZWxlY3RvclRhZ0Nhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKGZhbHNlKTsKLQotCQljbGVhbnVwQW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzIiwgInRlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcyIpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2Uob2xkQ2FzZUlkZW50aWZpZXIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcE5hbWVDYXNlKG9sZENhc2VQcm9wZXJ0eU5hbWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShvbGRDYXNlUHJvcGVydHlWYWx1ZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRTZWxlY3RvclRhZ0Nhc2Uob2xkQ2FzZVNlbGVjdG9yKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldEZvcm1hdFNvdXJjZShvbGRGb3JtYXRTb3VyY2UpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UXVvdGVWYWx1ZXMob2xkRm9ybWF0UXVvdGUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMjE4OTkzTm9Gb3JtYXRDbGVhbnVwKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIGNsZWFudXAgcHJlZmVyZW5jZXMgZm9yIHRoaXMgdGVzdAotCQlDU1NDbGVhbnVwU3RyYXRlZ3kgY3VycmVudFN0cmF0ZWd5ID0gQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlzaG9ydCBvbGRDYXNlSWRlbnRpZmllciA9IGN1cnJlbnRTdHJhdGVneS5nZXRJZGVudENhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5TmFtZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wTmFtZUNhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5VmFsdWUgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0UHJvcFZhbHVlQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlU2VsZWN0b3IgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0U2VsZWN0b3JUYWdDYXNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0U291cmNlID0gY3VycmVudFN0cmF0ZWd5LmlzRm9ybWF0U291cmNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0UXVvdGUgPSBjdXJyZW50U3RyYXRlZ3kuaXNRdW90ZVZhbHVlcygpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UXVvdGVWYWx1ZXMoZmFsc2UpOwotCi0JCWNsZWFudXBBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQuY3NzIiwgInRlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQtY2xlYW5lZC5jc3MiKTsKLQotCQljdXJyZW50U3RyYXRlZ3kuc2V0SWRlbnRDYXNlKG9sZENhc2VJZGVudGlmaWVyKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShvbGRDYXNlUHJvcGVydHlOYW1lKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BWYWx1ZUNhc2Uob2xkQ2FzZVByb3BlcnR5VmFsdWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKG9sZENhc2VTZWxlY3Rvcik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2Uob2xkRm9ybWF0U291cmNlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKG9sZEZvcm1hdFF1b3RlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM0OGExZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0JcHJpdmF0ZSBTdHJpbmdDb21wYXJlVXRpbCBmU3RyaW5nQ29tcGFyZVV0aWw7Ci0JcHJpdmF0ZSBGb3JtYXRQcm9jZXNzb3JDU1MgZm9ybWF0UHJvY2Vzc29yOwotCi0JcHJpdmF0ZSBib29sZWFuIGZPbGRDbGVhckJsYW5rTGluZXNQcmVmOwotCXByaXZhdGUgaW50IGZPbGRNYXhMaW5lV2lkdGhQcmVmOwotCXByaXZhdGUgU3RyaW5nIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmOwotCXByaXZhdGUgaW50IGZPbGRJbmRlbnRhdGlvblNpemVQcmVmOwotCi0JcHVibGljIFRlc3RGb3JtYXRQcm9jZXNzb3JDU1MoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIHByZWZlcmVuY2VzCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYgPSBwcmVmcy5nZXRCb29sZWFuKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQkJZk9sZE1heExpbmVXaWR0aFByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQkJZk9sZEluZGVudGF0aW9uQ2hhclByZWYgPSBwcmVmcy5nZXRTdHJpbmcoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQkJZk9sZEluZGVudGF0aW9uU2l6ZVByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFKTsKLQotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZmFsc2UpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIDcyKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgMSk7Ci0KLQkJZm9ybWF0UHJvY2Vzc29yID0gbmV3IEZvcm1hdFByb2Nlc3NvckNTUygpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyByZXN0b3JlIG9sZCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTLCBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCwgZk9sZE1heExpbmVXaWR0aFByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFLCBmT2xkSW5kZW50YXRpb25TaXplUHJlZik7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChiZWZvcmVNb2RlbCk7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBmb3JtYXR0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQiLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihmb3JtYXR0ZWRDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHNzM5OTBTZWxlY3RvckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcyIsICJ0ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGNhc2Ugd2hlbiBmb3JtYXQgd291bGQgaW5jb3JyZWN0bHkgYWRkIGV4dHJhIHNlbWljb2xvbnMuCi0JICogCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCVUcxMTE1NjlleHRyYVNlbWljb2xvbkZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi1mb3JtYXR0ZWQuY3NzIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgY2FzZSB3aGVuIGZvcm1hdCB3b3VsZCBpbmNvcnJlY3RseSBhZGQgc3BhY2UgYmV0d2VlbiBzZWxlY3RvciBhbmQKLQkgKiBhdHRyaWJ1dGUgc2VsZWN0b3JzIDxjb2RlPmlucHV0W3R5cGU9ImhpZGRlbiJdPC9jb2RlPiB3b3VsZCBiZQotCSAqIHdyb25nbHkgZm9ybWF0dGVkIGFzPGNvZGU+aW5wdXQgW3R5cGU9ImhpZGRlbiJdPC9jb2RlPiBpbnN0ZWFkIG9mCi0JICogYmVpbmcgbGVmdCBhbG9uZS4KLQkgKiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJVRzE0NjE5OGF0dHJpYnV0ZVNwZWNpZmllckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzIiwgInRlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzExMDUzOW11bHRpcGxlQ2xhc3NGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzI0ODQ2NWNvbWJpbmVkUHNldWRvQ2xhc3MoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzIiwgInRlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcyIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTk2NDc2c2VsZWN0b3JQc2V1ZG9jbGFzc2VzRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MiKTsKLQl9Ci0JCi0JLyoqCi0JICogZmlsZSBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBmb3JtYXQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTYzMzE1U2xhc2hCZWZvcmVQcmltYXRpdmUxKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8KLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMS5jc3MiLCAidGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzEuY3NzIik7Ci0JfQotCQotCS8qKgotCSAqIHNwYWNlIGFmdGVyIC8gc2hvdWxkIGJlIHJlbW92ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTYzMzE1U2xhc2hCZWZvcmVQcmltYXRpdmUyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMi5jc3MiLCAidGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzEuY3NzIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlIHdpdGggdHdvIGNvbW1lbnRzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiBNYWtlIHN1cmUgdGhhdCB0aGUgY29tbWVudHMgZG8gbm90IHJ1biB0b2dldGhlciBvbnRvIG9uZSBsaW5lLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb2xsYXBzZVdoaXRlc3BhY2VCZXR3ZWVuQ29tbWVudHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9jb21tZW50cy5jc3MiLCAidGVzdGZpbGVzL2NvbW1lbnRzLWZtdC5jc3MiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMGNhNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogQ2xhc3MgYXMgc2VsZWN0b3IgKi8NCi1IMS5wYXN0b3JhbCB7DQotCWNvbG9yOiAjMDBGRjAwDQotfQ0KLQ0KLS8qIElEIGFzIHNlbGVjdG9yICovDQotI3o5OHkgew0KLQlsZXR0ZXItc3BhY2luZzogMC4zZW0NCi19DQotDQotSDEjejk4eSB7DQotCWxldHRlci1zcGFjaW5nOiAwLjVlbQ0KLX0NCi0NCi0vKiBDb250ZXh0dWFsIHNlbGVjdG9ycyAqLw0KLURJViBQIHsNCi0JZm9udDogc21hbGwgc2Fucy1zZXJpZg0KLX0NCi0NCi0ucmVkZGlzaCBIMSB7DQotCWNvbG9yOiByZWQNCi19DQotDQotI3g3OHkgQ09ERSB7DQotCWJhY2tncm91bmQ6IGJsdWUNCi19DQotDQotRElWLnNpZGVub3RlIEgxIHsNCi0JZm9udC1zaXplOiBsYXJnZQ0KLX0NCi0NCi0vKiBBbmNob3IgcHNldWRvLWNsYXNzZXMgKi8NCi1BOmxpbmsgew0KLQljb2xvcjogcmVkDQotfSAvKiB1bnZpc2l0ZWQgbGluayAqLw0KLUE6dmlzaXRlZCB7DQotCWNvbG9yOiBibHVlDQotfSAvKiB2aXNpdGVkIGxpbmtzICovDQotQTphY3RpdmUgew0KLQljb2xvcjogbGltZQ0KLX0gLyogYWN0aXZlIGxpbmtzICovDQotDQotLyogUHNldWRvLWNsYXNzIGNvbWJpbmVkIHdpdGggbm9ybWFsIGNsYXNzICovDQotQS5leHRlcm5hbDp2aXNpdGVkIHsNCi0JY29sb3I6IGJsdWUNCi19DQotDQotLyogJ2ZpcnN0LWxpbmUnIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1saW5lIHsNCi0JZm9udC12YXJpYW50OiBzbWFsbC1jYXBzDQotfQ0KLQ0KLS8qICdmaXJzdC1sZXR0ZXInIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1sZXR0ZXIgew0KLQlmb250LXNpemU6IDIwMCU7DQotCWZsb2F0OiBsZWZ0DQotfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHB1cnBsZQ0KLX0NCi0NCi1QLmluaXRpYWw6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHJlZA0KLX0NCi0NCi0vKiBNdWx0aXBsZSBwc2V1ZG8tZWxlbWVudHMgKi8NCi1QIHsNCi0JY29sb3I6IHJlZDsNCi0JZm9udC1zaXplOiAxMnB0DQotfQ0KLQ0KLVA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IGdyZWVuOw0KLQlmb250LXNpemU6IDIwMCUNCi19DQotDQotUDpmaXJzdC1saW5lIHsNCi0JY29sb3I6IGJsdWUNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MmM5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIENsYXNzIGFzIHNlbGVjdG9yICovDQotSDEucGFzdG9yYWwgeyBjb2xvcjogIzAwRkYwMCB9DQotDQotLyogSUQgYXMgc2VsZWN0b3IgKi8NCi0jejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjNlbSB9DQotSDEjejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjVlbSB9DQotDQotLyogQ29udGV4dHVhbCBzZWxlY3RvcnMgKi8NCi1ESVYgUCAgICAgICAgICAgeyBmb250OiBzbWFsbCBzYW5zLXNlcmlmIH0NCi0ucmVkZGlzaCBIMSAgICAgeyBjb2xvcjogcmVkIH0NCi0jeDc4eSBDT0RFICAgICAgeyBiYWNrZ3JvdW5kOiBibHVlIH0NCi1ESVYuc2lkZW5vdGUgSDEgeyBmb250LXNpemU6IGxhcmdlIH0NCi0NCi0vKiBBbmNob3IgcHNldWRvLWNsYXNzZXMgKi8NCi1BOmxpbmsgeyBjb2xvcjogcmVkIH0gICAgICAgLyogdW52aXNpdGVkIGxpbmsgKi8NCi1BOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZSB9ICAgLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsgY29sb3I6IGxpbWUgfSAgICAvKiBhY3RpdmUgbGlua3MgKi8NCi0NCi0vKiBQc2V1ZG8tY2xhc3MgY29tYmluZWQgd2l0aCBub3JtYWwgY2xhc3MgKi8gDQotQS5leHRlcm5hbDp2aXNpdGVkIHsgY29sb3I6IGJsdWUgfQ0KLQ0KLS8qICdmaXJzdC1saW5lJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGluZSB7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyB9DQotDQotLyogJ2ZpcnN0LWxldHRlcicgcHNldWRvLWVsZW1lbnQgKi8NCi1QOmZpcnN0LWxldHRlciB7IGZvbnQtc2l6ZTogMjAwJTsgZmxvYXQ6IGxlZnQgfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IHB1cnBsZSB9DQotUC5pbml0aWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiByZWQgfQ0KLQ0KLS8qIE11bHRpcGxlIHBzZXVkby1lbGVtZW50cyAqLw0KLVAgeyBjb2xvcjogcmVkOyBmb250LXNpemU6IDEycHQgfQ0KLVA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDIwMCUgfQ0KLVA6Zmlyc3QtbGluZSB7IGNvbG9yOiBibHVlIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2U3YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogMiBzZXBhcmF0ZSBjbGFzc2VzIC0geWVzIHNwYWNlICovDQotLmNsYXNzT25lIC5jbGFzc1R3byB7DQotCWNvbG9yOiByZWQ7DQotfQ0KLQ0KLS8qIG11bHRpcGxlIGNsYXNzZXMgLSBubyBzcGFjZSAqLw0KLS5jbGFzc09uZS5jbGFzc1R3byB7DQotCWNvbG9yOiBsaW1lOw0KLX0NCi0NCi0vKiBpZCBhbmQgY2xhc3MgLSB5ZXMgc3BhY2UgKi8NCi0jbXlpZCAubXljbGFzcyB7DQotCWJvcmRlci10b3A6IDBweDsNCi19DQotDQotLyogaWQgd2l0aCBjbGFzcyAtIG5vIHNwYWNlICovDQotI215aWQubXljbGFzcyB7DQotCWJvcmRlci10b3A6IDBweDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1MDczZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIDIgc2VwYXJhdGUgY2xhc3NlcyAtIHllcyBzcGFjZSAqLw0KLS5jbGFzc09uZSAuY2xhc3NUd28gew0KLWNvbG9yOiByZWQ7DQotfQ0KLQ0KLS8qIG11bHRpcGxlIGNsYXNzZXMgLSBubyBzcGFjZSAqLw0KLS5jbGFzc09uZS5jbGFzc1R3byB7DQotY29sb3I6IGxpbWU7DQotfQ0KLQ0KLS8qIGlkIGFuZCBjbGFzcyAtIHllcyBzcGFjZSAqLw0KLSNteWlkIC5teWNsYXNzIHsNCi1ib3JkZXItdG9wOiAwcHg7DQotfQ0KLQ0KLS8qIGlkIHdpdGggY2xhc3MgLSBubyBzcGFjZSAqLw0KLSNteWlkLm15Y2xhc3Mgew0KLWJvcmRlci10b3A6IDBweDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24tZm9ybWF0dGVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmU2ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24tZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotLnNpdGVtYXBsZXYxIHsNCi0JZm9udC1mYW1pbHk6IFZlcmRhbmE7DQotCWZvbnQtc2l6ZTogMTJweDsNCi0JbGluZS1oZWlnaHQ6IDE3cHg7DQotCWNvbG9yOiAjNjY2NjY2Ow0KLQlmb250LXdlaWdodDogYm9sZDsNCi0JdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZTMwN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0uc2l0ZW1hcGxldjF7Zm9udC1mYW1pbHk6VmVyZGFuYTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxN3B4Ow0KLWNvbG9yOiM2NjY2NjY7Zm9udC13ZWlnaHQ6Ym9sZDsNCi10ZXh0LWRlY29yYXRpb246bm9uZTt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXItZm9ybWF0dGVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhZDFjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXItZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotaW5wdXRbdHlwZT0iaGlkZGVuIl0gew0KLQl3aWR0aDogOTglOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjMWRiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1pbnB1dFt0eXBlPSJoaWRkZW4iXSB7DQotd2lkdGg6IDk4JTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8xLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZDgzODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8xLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQENIQVJTRVQgIklTTy04ODU5LTEiOw0KLQ0KLS50ZXN0IHsNCi0JZm9udDogMTFweC8xOHB4IFZlcmRhbmEsIEFyaWFsOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8yLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlM2M3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AQ0hBUlNFVCAiSVNPLTg4NTktMSI7DQotDQotLnRlc3Qgew0KLQlmb250OiAxMXB4LyAxOHB4IFZlcmRhbmEsIEFyaWFsOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLWNsZWFuZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkZWE0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLWNsZWFuZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jZGVtbyB7DQotCWJhY2tncm91bmQ6IHVybChtaXhlZENhc2UvcHJvamVjdExvZ28uZ2lmKTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZkMGFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI2RlbW8gew0KLQliYWNrZ3JvdW5kOiBVUkwobWl4ZWRDYXNlL3Byb2plY3RMb2dvLmdpZik7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzQ1ZjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jYmxvY2s6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KLQotZGl2LmNvbnRlbnQgI2Jsb2NrOmFmdGVyIHsKLQljb250ZW50OiAiLiI7Ci19Ci0KLSNibG9jazo6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KLQotZGl2IHNwYW4uZml4LmNsZWFyIHsKLQljbGVhcjogYm90aDsKLX0KLQotZGl2IHNwYW4uZml4LmNsZWFyOmFmdGVyIHsKLQljb250ZW50OiBib3RoOwotfQotCi1kaXY6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4M2RmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jYmxvY2s6YWZ0ZXIgeyBjb250ZW50OiAiLiI7IH0KLWRpdi5jb250ZW50ICNibG9jazphZnRlciB7IGNvbnRlbnQ6ICIuIjsgfQotI2Jsb2NrOjphZnRlciB7Y29udGVudDogIi4iOyB9Ci1kaXYgc3Bhbi5maXguY2xlYXIgeyBjbGVhcjogYm90aDsgfQotZGl2IHNwYW4uZml4LmNsZWFyOmFmdGVyIHsgY29udGVudDogYm90aDsgfQotZGl2OmFmdGVyIHsgY29udGVudDogIi4iOyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQtY2xlYW5lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC1jbGVhbmVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4ZDk1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC1jbGVhbmVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsKLQotLyogU29tZSBraW5kIG9mIGNvbW1lbnQgYmVpbmcgbGVmdCB0byB0aGUKLQkKLQkgCQkJdXNlciAqLwotCSAJCQkKLQkgCQkJCi1oIHsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCXotaW5kZXg6IAkJCQkyOwotfQotCi0KLSNjb250ZXh0IHsJCQkJCQotCXRleHQtYWxpZ246IGxlZnQ7Ci0JYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci0JCQotCQkKLQkJfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjc2ODAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUBDSEFSU0VUICJJU08tODg1OS0xIjsKLQotLyogU29tZSBraW5kIG9mIGNvbW1lbnQgYmVpbmcgbGVmdCB0byB0aGUKLQkKLQkgCQkJdXNlciAqLwotCSAJCQkKLQkgCQkJCi1oIHsKLQlURVhULUFMSUdOOiBMRUZUOwotCXotaW5kZXg6IAkJCQkyOwotfQotCi0KLSNDT05URVhUIHsJCQkJCQotCXRleHQtYWxpZ246IGxlZnQ7Ci0JYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci0JCQotCQkKLQkJfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNmU2ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYTpmb2N1czpob3ZlcixkaXY6Zm9jdXM6aG92ZXIgew0KLQliYWNrZ3JvdW5kOiB3aGl0ZTsNCi19DQotDQotZGl2IGE6Zm9jdXM6aG92ZXIgew0KLQliYWNrZ3JvdW5kOiBibHVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWUwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1hOmZvY3VzOmhvdmVyLGRpdjpmb2N1czpob3ZlciB7DQotYmFja2dyb3VuZDogd2hpdGU7DQotfQ0KLQ0KLWRpdiBhOmZvY3VzOmhvdmVyIHsNCi1iYWNrZ3JvdW5kOiBibHVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2NvbW1lbnRzLWZtdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2NvbW1lbnRzLWZtdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYmRjMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy1mbXQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLyoNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qCUZvbw0KLSoJQmFyDQotKg0KLSoqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioNCi0NCi0JQWRkaXRpb25hbA0KLQ0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2NvbW1lbnRzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3YWRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2NvbW1lbnRzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKglGb28NCi0qCUJhcg0KLSoNCi0qKioqKioqKioqLw0KLQ0KLQ0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqDQotDQotCUFkZGl0aW9uYWwNCi0NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9BYnN0cmFjdE1vZGVsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzMzMzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuQ1NTQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ1NTQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5Db3VudGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5SR0JDb2xvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuUmVjdDsKLQotcHVibGljIGNsYXNzIEFic3RyYWN0TW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBJQ1NTTW9kZWwgZk1vZGVsID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0KLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfSURFTlRJRklFUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9QUk9QRVJUWV9OQU1FLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX1BST1BFUlRZX1ZBTFVFLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQotCQlmTW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmIChmTW9kZWwgIT0gbnVsbCkgewotCQkJZk1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJZk1vZGVsID0gbnVsbDsKLQkJfQotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXByb3RlY3RlZCBJQ1NTTW9kZWwgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBmTW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIElDU1NTdHlsZVNoZWV0IGdldFN0eWxlU2hlZXQoKSB7Ci0JCXJldHVybiAoSUNTU1N0eWxlU2hlZXQpIGZNb2RlbC5nZXREb2N1bWVudCgpOwotCX0KLQotCWNsYXNzIFByaW1pdGl2ZU51bWJlciB7Ci0JCXNob3J0IHR5cGU7Ci0JCWZsb2F0IHZhbHVlOwotCi0JCVByaW1pdGl2ZU51bWJlcihzaG9ydCBuZXdUeXBlLCBmbG9hdCBuZXdWYWx1ZSkgewotCQkJdHlwZSA9IG5ld1R5cGU7Ci0JCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQl9Ci0JfQotCi0JY2xhc3MgUHJpbWl0aXZlU3RyaW5nIHsKLQkJc2hvcnQgdHlwZTsKLQkJU3RyaW5nIHZhbHVlOwotCi0JCVByaW1pdGl2ZVN0cmluZyhzaG9ydCBuZXdUeXBlLCBTdHJpbmcgbmV3VmFsdWUpIHsKLQkJCXR5cGUgPSBuZXdUeXBlOwotCQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJfQotCX0KLQotCS8qIGZvciBpbnQsIGZsb2F0ICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVOdW1iZXIoQ1NTVmFsdWUgYWN0dWFsLCBQcmltaXRpdmVOdW1iZXIgZXhwZWN0ZWQpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50eXBlLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC52YWx1ZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRGbG9hdFZhbHVlKGV4cGVjdGVkLnR5cGUpLCAwKTsKLQl9Ci0KLQkvKiBmb3Igc3RyaW5nICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVTdHJpbmcoQ1NTVmFsdWUgYWN0dWFsLCBQcmltaXRpdmVTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50eXBlLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC52YWx1ZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQkvKiBmb3IgY291bnRlciAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlQ291bnRlcihDU1NWYWx1ZSBhY3R1YWwsIFN0cmluZyBpZGVudGlmaWVyLCBTdHJpbmcgbGlzdFN0eWxlLCBTdHJpbmcgc2VwYXJhdG9yKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPVU5URVIsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJQ291bnRlciBjb3VudGVyID0gKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRDb3VudGVyVmFsdWUoKTsKLQkJYXNzZXJ0RXF1YWxzKGlkZW50aWZpZXIsIGNvdW50ZXIuZ2V0SWRlbnRpZmllcigpKTsKLQkJYXNzZXJ0RXF1YWxzKGxpc3RTdHlsZSwgY291bnRlci5nZXRMaXN0U3R5bGUoKSk7Ci0JCWFzc2VydEVxdWFscyhzZXBhcmF0b3IsIGNvdW50ZXIuZ2V0U2VwYXJhdG9yKCkpOwotCX0KLQotCS8qIGZvciByZWN0ICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVSZWN0KENTU1ZhbHVlIGFjdHVhbCwgT2JqZWN0W10gZXhwZWN0ZWRBcnJheSkgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SRUNULCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCVJlY3QgcmVjdCA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UmVjdFZhbHVlKCk7Ci0JCUNTU1ByaW1pdGl2ZVZhbHVlIHZhbHVlOwotCQlPYmplY3QgZXhwZWN0ZWQ7Ci0JCXZhbHVlID0gcmVjdC5nZXRUb3AoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzBdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRSaWdodCgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMV07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSByZWN0LmdldEJvdHRvbSgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMl07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSByZWN0LmdldExlZnQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzNdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JfQotCi0JLyogZm9yIHJnYiAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlUmdiKENTU1ZhbHVlIGFjdHVhbCwgT2JqZWN0W10gZXhwZWN0ZWRBcnJheSkgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SR0JDT0xPUiwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlSR0JDb2xvciBjb2xvciA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UkdCQ29sb3JWYWx1ZSgpOwotCQlDU1NQcmltaXRpdmVWYWx1ZSB2YWx1ZTsKLQkJT2JqZWN0IGV4cGVjdGVkOwotCQl2YWx1ZSA9IGNvbG9yLmdldFJlZCgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMF07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSBjb2xvci5nZXRHcmVlbigpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMV07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSBjb2xvci5nZXRCbHVlKCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVsyXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTQ2hhcnNldFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiNGFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTQ2hhcnNldFJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotCi1wdWJsaWMgY2xhc3MgQ1NTQ2hhcnNldFJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFJVTEUgPSAiQGNoYXJzZXQgXCJpc28tODg1OS0xXCI7IjsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEUsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0NoYXJzZXRSdWxlKTsKLQkJQ1NTQ2hhcnNldFJ1bGUgY2hhcnNldFJ1bGUgPSAoQ1NTQ2hhcnNldFJ1bGUpIHJ1bGU7Ci0JCWFzc2VydEVxdWFscygiaXNvLTg4NTktMSIsIGNoYXJzZXRSdWxlLmdldEVuY29kaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoUlVMRSwgY2hhcnNldFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUnVsZSgpIHsKLQkJSUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCUlDU1NEb2N1bWVudCBkb2MgPSBzaGVldDsKLQkJQ1NTQ2hhcnNldFJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NDaGFyc2V0UnVsZSgpOwotCQluZXdSdWxlLnNldEVuY29kaW5nKCJpc28tODg1OS0xIik7Ci0JCXNoZWV0Lmluc2VydFJ1bGVCZWZvcmUobmV3UnVsZSwgbnVsbCk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NDaGFyc2V0UnVsZSk7Ci0JCUNTU0NoYXJzZXRSdWxlIGNoYXJzZXRSdWxlID0gKENTU0NoYXJzZXRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImlzby04ODU5LTEiLCBjaGFyc2V0UnVsZS5nZXRFbmNvZGluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEUsIGNoYXJzZXRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWJmNzcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYWNlUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NGb250RmFjZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlTGlzdDsKLQotcHVibGljIGNsYXNzIENTU0ZvbnRGYWNlUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGUoKSB7Ci0JCWZpbmFsIFN0cmluZyBSVUxFID0gIkBmb250LWZhY2UgeyBmb250LWZhbWlseTogXCJTd2lzcyA3MjFcIjsgc3JjOiB1cmwoc3dpc3M3MjEucGZyKTsgLyogVGhlIGV4cGFuZGVkIFN3aXNzIDcyMSAqLyBmb250LXN0cmV0Y2g6IGV4cGFuZGVkOyB9IjsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRSwgMCkpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gKChDU1NGb250RmFjZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygzLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ByaW1pdGl2ZVZhbHVlIHByaW1pdGl2ZVZhbHVlOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQotCQlwcmltaXRpdmVWYWx1ZSA9IChDU1NQcmltaXRpdmVWYWx1ZSkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfU1RSSU5HLCBwcmltaXRpdmVWYWx1ZS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIlN3aXNzIDcyMSIsIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0KLQkJcHJpbWl0aXZlVmFsdWUgPSAoQ1NTUHJpbWl0aXZlVmFsdWUpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzd2lzczcyMS5wZnIiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3RyZXRjaCIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCi0JCXByaW1pdGl2ZVZhbHVlID0gKENTU1ByaW1pdGl2ZVZhbHVlKSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJleHBhbmRlZCIsIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0SW5zZXJ0VGV4dDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDEKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNCwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgIlN3aXNzIDcyMSIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAic3dpc3M3MjFibGsucGZyIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiaXRhbGljIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgODAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDkwMCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0SW5zZXJ0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDIKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoOSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiUGFsYXRpbm8iKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiVGltZXMgTmV3IFJvbWFuIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIk5ldyBZb3JrIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg1KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNiksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlV0b3BpYSIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDgpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vc29tZXdoZXJlL2ZyZWUvZm9udCIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgInNlcmlmIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg5LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNDAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUwMCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJub3JtYWwiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXZhcmlhbnQiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImFsbCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAzCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDUsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDQsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIkFsYWJhbWEgSXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgImh0dHA6Ly93d3cuZm9udHMub3JnL0EvYWxhYmFtYS1pdGFsaWMiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRk9STUFULCAidHJ1ZXR5cGUiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJwYW5vc2UtMSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDEwLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg3KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDkpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDkpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMykpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIkFsYWJhbWEiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJzZXJpZiIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoNSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDMwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0MDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNTAwKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXN0eWxlIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJpdGFsaWMiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJvYmxpcXVlIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYW1pbHlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFtaWx5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmNlMGQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYW1pbHlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotCi0KLXB1YmxpYyBjbGFzcyBDU1NGb250RmFtaWx5VGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX0ZBTUlMWSA9ICJmb250LWZhbWlseSI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9udEZhbWlsaWVzKCkgdGhyb3dzIElPRXhjZXB0aW9uICB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NGb250RmFtaWx5VGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlcyA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg0LCBydWxlcy5nZXRMZW5ndGgoKSk7Ci0KLQkJLy8gUnVsZSAxOiBObyB3aGl0ZXNwYWNlCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gUnVsZSAxOiBObyB3aGl0ZXNwYWNlCi0JCXJ1bGUgPSBydWxlcy5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKEZPTlRfRkFNSUxZKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiQ291cmllciIpKTsKLQotCQkvLyBSdWxlIDI6IFNpbmdsZSB3aGl0ZXNwYWNlCi0JCXJ1bGUgPSBydWxlcy5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKEZPTlRfRkFNSUxZKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiQ291cmllciBOZXciKSk7Ci0KLQkJLy8gUnVsZSAzOiBJbiBxdW90ZXMKLQkJcnVsZSA9IHJ1bGVzLml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoRk9OVF9GQU1JTFkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfU1RSSU5HLCAiQ291cmllciBOZXciKSk7Ci0KLQkJLy8gUnVsZSA0OiBUYWJzIGFuZCBzcGFjZXMgYWxsIG92ZXIKLQkJcnVsZSA9IHJ1bGVzLml0ZW0oMyk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoRk9OVF9GQU1JTFkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJDb21pYyBTYW5zIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NJbXBvcnRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjJlYjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0ltcG9ydFJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NJbXBvcnRSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5NZWRpYUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NJbXBvcnRSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlRG91YmxlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IFwiZHVtbXkuY3NzXCI7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlU2luZ2xlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IFwnZHVtbXkuY3NzXCc7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsTm9RdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKGR1bW15LmNzcyk7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsRG91YmxlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKTsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVVcmxTaW5nbGVRdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwnZHVtbXkuY3NzXCcpOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZU1lZGlhMSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwiZHVtbXkuY3NzXCIpIG1lZGlhMTsiLCAiZHVtbXkuY3NzIiwgbmV3IFN0cmluZ1tdeyJtZWRpYTEifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVNZWRpYTIoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcJ2R1bW15LmNzc1wnKSBtZWRpYTEsIG1lZGlhMjsiLCAiZHVtbXkuY3NzIiwgbmV3IFN0cmluZ1tdeyJtZWRpYTEiLCAibWVkaWEyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVSdWxlKCkgewotCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJSUNTU0RvY3VtZW50IGRvYyA9IHNoZWV0OwotCQlJQ1NTSW1wb3J0UnVsZSBuZXdSdWxlID0gZG9jLmNyZWF0ZUNTU0ltcG9ydFJ1bGUoKTsKLQkJbmV3UnVsZS5zZXRIcmVmKCJkdW1teS5jc3MiKTsKLQkJTWVkaWFMaXN0IG5ld0xpc3QgPSBuZXdSdWxlLmdldE1lZGlhKCk7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTEiKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMiIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTSW1wb3J0UnVsZSk7Ci0JCUNTU0ltcG9ydFJ1bGUgaW1wb3J0UnVsZSA9IChDU1NJbXBvcnRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImR1bW15LmNzcyIsIGltcG9ydFJ1bGUuZ2V0SHJlZigpKTsKLQkJTWVkaWFMaXN0IG1lZGlhTGlzdCA9IGltcG9ydFJ1bGUuZ2V0TWVkaWEoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG1lZGlhTGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWExIiwgbWVkaWFMaXN0Lml0ZW0oMCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMiIsIG1lZGlhTGlzdC5pdGVtKDEpKTsKLQotCQlhc3NlcnRFcXVhbHMoIkBpbXBvcnQgdXJsKFwiZHVtbXkuY3NzXCIpIG1lZGlhMSwgbWVkaWEyOyIsIGltcG9ydFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJbnNlcnQoU3RyaW5nIHJ1bGVTdHJpbmcsIFN0cmluZyBocmVmLCBTdHJpbmdbXSBtZWRpYSkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKHJ1bGVTdHJpbmcsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ltcG9ydFJ1bGUpOwotCi0JCUNTU0ltcG9ydFJ1bGUgaW1wb3J0UnVsZSA9IChDU1NJbXBvcnRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoaHJlZiwgaW1wb3J0UnVsZS5nZXRIcmVmKCkpOwotCi0JCWlmIChtZWRpYSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRFcXVhbHMobWVkaWEubGVuZ3RoLCBpbXBvcnRSdWxlLmdldE1lZGlhKCkuZ2V0TGVuZ3RoKCkpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZWRpYS5sZW5ndGg7IGkrKykgewotCQkJCWFzc2VydEVxdWFscyhtZWRpYVtpXSwgaW1wb3J0UnVsZS5nZXRNZWRpYSgpLml0ZW0oaSkpOwotCQkJfQotCQl9Ci0KLQkJYXNzZXJ0RXF1YWxzKHJ1bGVTdHJpbmcsIGltcG9ydFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjI4NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWVkaWFSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNZWRpYVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NNZWRpYVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLk1lZGlhTGlzdDsKLQotcHVibGljIGNsYXNzIENTU01lZGlhUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVJ1bGUoKSB7Ci0JCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlJQ1NTRG9jdW1lbnQgZG9jID0gc2hlZXQ7Ci0JCUlDU1NNZWRpYVJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NNZWRpYVJ1bGUoKTsKLQkJTWVkaWFMaXN0IG5ld0xpc3QgPSBuZXdSdWxlLmdldE1lZGlhKCk7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTEiKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMiIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTTWVkaWFSdWxlKTsKLQkJQ1NTTWVkaWFSdWxlIG1lZGlhUnVsZSA9IChDU1NNZWRpYVJ1bGUpIHJ1bGU7Ci0KLQkJTWVkaWFMaXN0IG1lZGlhTGlzdCA9IG1lZGlhUnVsZS5nZXRNZWRpYSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgbWVkaWFMaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTEiLCBtZWRpYUxpc3QuaXRlbSgwKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWEyIiwgbWVkaWFMaXN0Lml0ZW0oMSkpOwotCi0JCWFzc2VydEVxdWFscygiQG1lZGlhIG1lZGlhMSwgbWVkaWEyIHsiICsgRmlsZVV0aWwuY29tbW9uRU9MICsgIn0iLCBtZWRpYVJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZXRhTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZXRhTW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTgxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWV0YU1vZGVsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuSVZhbElEOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuUHJvcENNUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLm1ldGFtb2RlbC5DU1NNTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLm1ldGFtb2RlbC5DU1NNTVByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwuQ1NTTWV0YU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwuQ1NTUHJvZmlsZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwudXRpbC5DU1NNZXRhTW9kZWxVdGlsOwotCi1wdWJsaWMgY2xhc3MgQ1NTTWV0YU1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50UHJvcGVydHlWYWx1ZXMycjEoKSB7Ci0JCUNTU01ldGFNb2RlbCBtb2RlbCA9IENTU1Byb2ZpbGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQcm9maWxlKCkuZ2V0TWV0YU1vZGVsKCk7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQlDU1NNZXRhTW9kZWxVdGlsIHV0aWwgPSBuZXcgQ1NTTWV0YU1vZGVsVXRpbChtb2RlbCk7Ci0JCQlDU1NNTVByb3BlcnR5IHByb3BlcnR5ID0gdXRpbC5nZXRQcm9wZXJ0eShQcm9wQ01Qcm9wZXJ0eS5QX0NPTlRFTlQpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm9wZXJ0eS5nZXRWYWx1ZXMoKTsKLQkJCVNldCBzZXQgPSBuZXcgSGFzaFNldCgyKTsKLQkJCXNldC5hZGQoSVZhbElELlZfTk9STUFMKTsKLQkJCXNldC5hZGQoSVZhbElELlZfTk9ORSk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJQ1NTTU1Ob2RlIG5vZGUgPSAoQ1NTTU1Ob2RlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKHNldC5jb250YWlucyhub2RlLmdldE5hbWUoKSkpIHsKLQkJCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBzaG91bGQgYmUgYSBrZXl3b3JkIiwgQ1NTTU1Ob2RlLlRZUEVfS0VZV09SRCwgbm9kZS5nZXRUeXBlKCkpOwotCQkJCQlzZXQucmVtb3ZlKG5vZGUuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJUaGUgY29udGVudCBwcm9wZXJ0eSBpcyBtaXNzaW5nIHZhbHVlcyBhZGRlZCBmb3IgQ1NTIDIgcmV2aXNpb24gMS4iLCBzZXQuaXNFbXB0eSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDdXJzb3JQcm9wZXJ0eVZhbHVlczJyMSgpIHsKLQkJQ1NTTWV0YU1vZGVsIG1vZGVsID0gQ1NTUHJvZmlsZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdFByb2ZpbGUoKS5nZXRNZXRhTW9kZWwoKTsKLQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCUNTU01ldGFNb2RlbFV0aWwgdXRpbCA9IG5ldyBDU1NNZXRhTW9kZWxVdGlsKG1vZGVsKTsKLQkJCUNTU01NUHJvcGVydHkgcHJvcGVydHkgPSB1dGlsLmdldFByb3BlcnR5KFByb3BDTVByb3BlcnR5LlBfQ1VSU09SKTsKLQkJCUl0ZXJhdG9yIGl0ID0gcHJvcGVydHkuZ2V0VmFsdWVzKCk7Ci0JCQlTZXQgc2V0ID0gbmV3IEhhc2hTZXQoMSk7Ci0JCQlzZXQuYWRkKElWYWxJRC5WX1BST0dSRVNTKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlDU1NNTU5vZGUgbm9kZSA9IChDU1NNTU5vZGUpIGl0Lm5leHQoKTsKLQkJCQlpZiAoc2V0LmNvbnRhaW5zKG5vZGUuZ2V0TmFtZSgpKSkgewotCQkJCQlhc3NlcnRFcXVhbHMoIlByb3BlcnR5IHNob3VsZCBiZSBhIGtleXdvcmQiLCBDU1NNTU5vZGUuVFlQRV9LRVlXT1JELCBub2RlLmdldFR5cGUoKSk7Ci0JCQkJCXNldC5yZW1vdmUobm9kZS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIlRoZSBjb250ZW50IHByb3BlcnR5IGlzIG1pc3NpbmcgdmFsdWVzIGFkZGVkIGZvciBDU1MgMiByZXZpc2lvbiAxLiIsIHNldC5pc0VtcHR5KCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERpc3BsYXlQcm9wZXJ0eVZhbHVlczJyMSgpIHsKLQkJQ1NTTWV0YU1vZGVsIG1vZGVsID0gQ1NTUHJvZmlsZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdFByb2ZpbGUoKS5nZXRNZXRhTW9kZWwoKTsKLQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCUNTU01ldGFNb2RlbFV0aWwgdXRpbCA9IG5ldyBDU1NNZXRhTW9kZWxVdGlsKG1vZGVsKTsKLQkJCUNTU01NUHJvcGVydHkgcHJvcGVydHkgPSB1dGlsLmdldFByb3BlcnR5KFByb3BDTVByb3BlcnR5LlBfRElTUExBWSk7Ci0JCQlJdGVyYXRvciBpdCA9IHByb3BlcnR5LmdldFZhbHVlcygpOwotCQkJU2V0IHNldCA9IG5ldyBIYXNoU2V0KDEpOwotCQkJc2V0LmFkZChJVmFsSUQuVl9JTkxJTkVfQkxPQ0spOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUNTU01NTm9kZSBub2RlID0gKENTU01NTm9kZSkgaXQubmV4dCgpOwotCQkJCWlmIChzZXQuY29udGFpbnMobm9kZS5nZXROYW1lKCkpKSB7Ci0JCQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgc2hvdWxkIGJlIGEga2V5d29yZCIsIENTU01NTm9kZS5UWVBFX0tFWVdPUkQsIG5vZGUuZ2V0VHlwZSgpKTsKLQkJCQkJc2V0LnJlbW92ZShub2RlLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgiVGhlIGNvbnRlbnQgcHJvcGVydHkgaXMgbWlzc2luZyB2YWx1ZXMgYWRkZWQgZm9yIENTUyAyIHJldmlzaW9uIDEuIiwgc2V0LmlzRW1wdHkoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0V2hpdGVzcGFjZVByb3BlcnR5VmFsdWVzMnIxKCkgewotCQlDU1NNZXRhTW9kZWwgbW9kZWwgPSBDU1NQcm9maWxlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0UHJvZmlsZSgpLmdldE1ldGFNb2RlbCgpOwotCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJQ1NTTWV0YU1vZGVsVXRpbCB1dGlsID0gbmV3IENTU01ldGFNb2RlbFV0aWwobW9kZWwpOwotCQkJQ1NTTU1Qcm9wZXJ0eSBwcm9wZXJ0eSA9IHV0aWwuZ2V0UHJvcGVydHkoUHJvcENNUHJvcGVydHkuUF9XSElURV9TUEFDRSk7Ci0JCQlJdGVyYXRvciBpdCA9IHByb3BlcnR5LmdldFZhbHVlcygpOwotCQkJU2V0IHNldCA9IG5ldyBIYXNoU2V0KDEpOwotCQkJc2V0LmFkZChJVmFsSUQuVl9QUkVfTElORSk7Ci0JCQlzZXQuYWRkKElWYWxJRC5WX1BSRV9XUkFQKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlDU1NNTU5vZGUgbm9kZSA9IChDU1NNTU5vZGUpIGl0Lm5leHQoKTsKLQkJCQlpZiAoc2V0LmNvbnRhaW5zKG5vZGUuZ2V0TmFtZSgpKSkgewotCQkJCQlhc3NlcnRFcXVhbHMoIlByb3BlcnR5IHNob3VsZCBiZSBhIGtleXdvcmQiLCBDU1NNTU5vZGUuVFlQRV9LRVlXT1JELCBub2RlLmdldFR5cGUoKSk7Ci0JCQkJCXNldC5yZW1vdmUobm9kZS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIlRoZSBjb250ZW50IHByb3BlcnR5IGlzIG1pc3NpbmcgdmFsdWVzIGFkZGVkIGZvciBDU1MgMiByZXZpc2lvbiAxLiIsIHNldC5pc0VtcHR5KCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbG9yUHJvcGVydHlWYWx1ZXMycjEoKSB7Ci0JCUNTU01ldGFNb2RlbCBtb2RlbCA9IENTU1Byb2ZpbGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQcm9maWxlKCkuZ2V0TWV0YU1vZGVsKCk7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQlDU1NNZXRhTW9kZWxVdGlsIHV0aWwgPSBuZXcgQ1NTTWV0YU1vZGVsVXRpbChtb2RlbCk7Ci0JCQlDU1NNTVByb3BlcnR5IHByb3BlcnR5ID0gdXRpbC5nZXRQcm9wZXJ0eShQcm9wQ01Qcm9wZXJ0eS5QX0NPTE9SKTsKLQkJCUl0ZXJhdG9yIGl0ID0gcHJvcGVydHkuZ2V0VmFsdWVzKCk7Ci0JCQlTZXQgc2V0ID0gbmV3IEhhc2hTZXQoMSk7Ci0JCQlzZXQuYWRkKElWYWxJRC5WX09SQU5HRSk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJQ1NTTU1Ob2RlIG5vZGUgPSAoQ1NTTU1Ob2RlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKHNldC5jb250YWlucyhub2RlLmdldE5hbWUoKSkpIHsKLQkJCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBzaG91bGQgYmUgYSBrZXl3b3JkIiwgQ1NTTU1Ob2RlLlRZUEVfS0VZV09SRCwgbm9kZS5nZXRUeXBlKCkpOwotCQkJCQlzZXQucmVtb3ZlKG5vZGUuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJUaGUgY29udGVudCBwcm9wZXJ0eSBpcyBtaXNzaW5nIHZhbHVlcyBhZGRlZCBmb3IgQ1NTIDIgcmV2aXNpb24gMS4iLCBzZXQuaXNFbXB0eSgpKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTUGFnZVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOWJjMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTUGFnZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1BhZ2VSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NQYWdlUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDEKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMiwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU4sIChmbG9hdCkgOC41KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTiwgMTEpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgMgotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiYXV0byIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUEVSQ0VOVEFHRSwgMTApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgMwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygiOmxlZnQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLWxlZnQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCA0KSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tcmlnaHQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDQKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgzKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIjpyaWdodCIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tbGVmdCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDMpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1yaWdodCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NWYWx1ZUxpc3QgdmFsdWVMaXN0OwotCi0JCS8vIHJ1bGUgNQotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDQpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygibmFycm93IiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygyLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgOSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDE4KSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDYKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSg1KTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoInJvdGF0ZWQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJsYW5kc2NhcGUiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODk2NjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWU7Ci0KLXB1YmxpYyBjbGFzcyBDU1NTdHlsZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0TnVtYmVycygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NTdHlsZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIwLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJLy8gMDEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJOVU1CRVIiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX05VTUJFUiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBFUkNFTlRBR0UiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BFUkNFTlRBR0UsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJFTVMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0VNUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkVYUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRVhTLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFgiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYLCArMTIzLjQ1NmYpKTsKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQWDIiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYLCAtMTIzZikpOwotCi0KLQkJCi0JCS8vIDA2Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQ00iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA3Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTU0iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX01NLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BULCAxMjMuNDU2ZikpOwotCi0JCS8vIDEwCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUEMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BDLCAxMjMuNDU2ZikpOwotCi0JCS8vIDExCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiREVHIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19ERUcsIC0xMjMuNDU2ZikpOwotCi0JCS8vIDEyCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUkFEIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SQUQsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJHUkFEIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19HUkFELCAxMjMuNDU2ZikpOwotCi0JCS8vIDE0Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTVMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX01TLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkhaIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19IWiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIktIWiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfS0haLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRElNRU5TSU9OIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19ESU1FTlNJT04sIC0xMjMuNDU2ZikpOwotCi0JCS8vIDE5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU5URUdFUiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyMykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0U3RyaW5ncygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NTdHlsZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDExLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJLy8gMDEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJTVFJJTkciKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgInN0cmluZyIpKTsKLQotCQkvLyAwMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlVSSSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAiaHR0cDovL3d3dy5pYm0uY29tLyIpKTsKLQotCQkvLyAwMwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklERU5UIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImxlZnQiKSk7Ci0KLQkJLy8gMDQKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJIQVNIIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSEFTSCwgIiNhYmNkZWYiKSk7Ci0KLQkJLy8gMDUKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJVUkFOR0UiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkFOR0UsICJVKzIwQTciKSk7Ci0KLQkJLy8gMDYKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJTTEFTSCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NMQVNILCAiLyIpKTsKLQotCQkvLyAwNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkNPTU1BIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCi0JCS8vIDA4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU5IRVJJVF9QUklNSVRJVkUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTkhFUklUX1BSSU1JVElWRSwgImluaGVyaXQiKSk7Ci0KLQkJLy8gMDkKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJBVFRSIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19BVFRSLCAiS0VZIikpOwotCi0JCS8vIDEwCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRk9STUFUIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRk9STUFULCAidHJ1ZWRvYyIpKTsKLQotCQkvLyAxMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkxPQ0FMIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJFeGNlbHNpb3IgUm9tYW4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHRGdW5jdGlvbnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygzLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJDT1VOVEVSIik7Ci0JCWNoZWNrUHJpbWl0aXZlQ291bnRlcih2YWx1ZSwgInBhci1udW0iLCAidXBwZXItcm9tYW4iLCBudWxsKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJFQ1QiKTsKLQkJY2hlY2tQcmltaXRpdmVSZWN0KHZhbHVlLCBuZXcgT2JqZWN0W117bmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDM0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDU2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDc4KX0pOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUkdCQ09MT1IiKTsKLQkJY2hlY2tQcmltaXRpdmVSZ2IodmFsdWUsIG5ldyBPYmplY3RbXXtuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMjU1KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAwKX0pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVTaGVldFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2NlYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVTaGVldFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci0KLQotcHVibGljIGNsYXNzIENTU1N0eWxlU2hlZXRUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gxID0gIkgxIHsgY29sb3IgOiByZWQ7IH0iOwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gyID0gIkgyIHsgY29sb3IgOiByZWQ7IH0iOwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gzID0gIkgzIHsgY29sb3IgOiByZWQ7IH0iOwotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGUoKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMywgMCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gxLCAwKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDIsIDEpKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gyLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMywgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVJ1bGUoKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMywgMCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gxLCAwKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDIsIDEpKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdDsKLQkJQ1NTUnVsZSBydWxlOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMSk7Ci0JCXJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gzLCBydWxlLmdldENzc1RleHQoKSk7Ci0KLQkJc2hlZXQuZGVsZXRlUnVsZSgxKTsKLQkJcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMSwgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMCk7Ci0KLQkJdHJ5IHsKLQkJCXNoZWV0LmRlbGV0ZVJ1bGUoMCk7Ci0JCX0KLQkJY2F0Y2ggKERPTUV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRFcXVhbHMoRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSLCBlLmNvZGUpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1NEZWNsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmZjOWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1NEZWNsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmVuY29kaW5nLkNTU0RvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXIuQ1NTU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC51dGlsLkNTU1N0eWxlRGVjbGFyYXRpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC51dGlsLmRlY2xhcmF0aW9uLkNTU1Byb3BlcnR5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDU1NEZWNsIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIGNvbW1lbnRpbmcgb3V0IHRoaXMgdGVzdCBiZWNhdXNlIGRlY2wuc2V0Q3NzVGV4dCgpIGlzIG5vdCBhbiBpbXBsZW1lbnRlZCBtZXRob2QKLS8vCXB1YmxpYyB2b2lkIHRlc3REZWNsKCkgewotLy8JCUNTU1Byb3BlcnR5Q29udGV4dCBjb250ZXh0ID0gbmV3IENTU1Byb3BlcnR5Q29udGV4dCgpOwotLy8JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBDU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZVN0eWxlRGVjbGFyYXRpb24oKTsKLS8vCQljb250ZXh0LmluaXRpYWxpemUoZGVjbCk7Ci0vLwkJZGVjbC5zZXRDc3NUZXh0KGdldFN0cmluZygpICE9IG51bGwgPyBnZXRTdHJpbmcoKSA6ICIiKTsvLyROT04tTkxTLTEkCi0vLwl9Ci0vLwlwcml2YXRlIFN0cmluZyBnZXRTdHJpbmcoKSB7Ci0vLwkJcmV0dXJuICJib2R5IHt9IjsKLS8vCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhbG9uZUNTU0RlY2woKSB7Ci0JCS8vIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yMDI2MTUKLQkJQ1NTUHJvcGVydHlDb250ZXh0IGNvbnRleHQgPSBuZXcgQ1NTUHJvcGVydHlDb250ZXh0KCk7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBDU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZVN0eWxlRGVjbGFyYXRpb24oKTsKLQkJY29udGV4dC5pbml0aWFsaXplKGRlY2wpOwotCQlTdHJpbmcgY3NzVGV4dCA9IGRlY2wuZ2V0Q3NzVGV4dCgpOwotCQlhc3NlcnRFcXVhbHMoInN0YW5kYWxvbmUgY3NzIG5vZGUgd2FzIG5vdCBpbml0aWFsaXplZCIsICIiLCBjc3NUZXh0KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLQkJY29udGV4dC5zZXRNYXJnaW4oImF1dG8iKTsgLy8kTk9OLU5MUy0xJAotCQljb250ZXh0LnNldENvbG9yKCJyZWQiKTsgLy8kTk9OLU5MUy0xJAotCQljb250ZXh0LnNldEJvcmRlcigidGhpY2siKTsgLy8kTk9OLU5MUy0xJAotCQljb250ZXh0LmFwcGx5RnVsbChkZWNsKTsKLQkJY3NzVGV4dCA9IGRlY2wuZ2V0Q3NzVGV4dCgpOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSAiY29sb3I6IHJlZDsgYm9yZGVyOiB0aGljazsgbWFyZ2luOiBhdXRvIjsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoInN0YW5kYWxvbmUgY3NzIG5vZGUncyBwcm9wZXJ0aWVzIHdlcmUgbm90IHNldCBhcyBleHBlY3RlZCIsIGV4cGVjdGVkLCBjc3NUZXh0KTsgIC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTU3R5bGVEZWNsSXRlbSgpIHsKLQkJU3RyaW5nIHZhbHVlID0gImNvbG9yOiBibHVlOyI7Ci0JCUlEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgQ1NTRG9jdW1lbnRMb2FkZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSAoSVN0cnVjdHVyZWREb2N1bWVudCkgbG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQotCQlzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KHZhbHVlKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTU3R5bGVEZWNsSXRlbU1PREVfREVDTEFSQVRJT04oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTik7Ci0KLQkJc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LnNldCh2YWx1ZSk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW1TVFlMRV9TSEVFVCgpIHsKLQkJU3RyaW5nIHZhbHVlID0gImNvbG9yOiBibHVlOyI7Ci0JCUlEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgQ1NTRG9jdW1lbnRMb2FkZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSAoSVN0cnVjdHVyZWREb2N1bWVudCkgbG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX1NUWUxFU0hFRVQpOwotCi0JCXNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5zZXQodmFsdWUpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NNb2RlbCgpIHsKLQotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChnZXRIVE1MRG9jdW1lbnRUZXh0KCkpOwotCi0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCi0JfQotCQotCS8qKgotCSAqIFRvIHRlc3QgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnLzI5ODExMQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRQcm9wZXJ0eUluRXhpc3RpbmdSdWxlKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQl0cnkgewotCQkJU3RyaW5nIG9yaWdpbmFsRG9jdW1lbnQgPSAKLQkJCQkiQENIQVJTRVQgXCJJU08tODg1OS0xXCI7XHJcbiIgKwotCQkJCSIudGVzdCB7XHJcbiIgKwotCQkJCSJ9IjsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KG9yaWdpbmFsRG9jdW1lbnQpOwotCi0JCQlJbmRleGVkUmVnaW9uIGluZGV4ZWRSZWdpb24gPSBtb2RlbC5nZXRJbmRleGVkUmVnaW9uKDI4KTsKLQkJCWFzc2VydFRydWUoIkluZGV4ZWQgcmVnaW9uIHNob3VsZCBiZSBhbiBJQ1NTU3R5bGVSdWxlIiwgaW5kZXhlZFJlZ2lvbiBpbnN0YW5jZW9mIElDU1NTdHlsZVJ1bGUpOwotCQkJSUNTU1N0eWxlUnVsZSBydWxlID0gKElDU1NTdHlsZVJ1bGUpaW5kZXhlZFJlZ2lvbjsKLQkJCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gKElDU1NTdHlsZURlY2xhcmF0aW9uKXJ1bGUuZ2V0U3R5bGUoKTsKLQkJCWRlY2xhcmF0aW9uLnNldFByb3BlcnR5KCJjb2xvciIsICIjMDA4MDQwIiwgbnVsbCk7Ci0JCQlDU1NQcm9wZXJ0eUNvbnRleHQgY29udGV4dCA9IG5ldyBDU1NQcm9wZXJ0eUNvbnRleHQoZGVjbGFyYXRpb24pOwotCQkJY29udGV4dC5hcHBseU1vZGlmaWVkKGRlY2xhcmF0aW9uKTsKLQkJCVN0cmluZyBuZXdEb2N1bWVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKTsKLQkJCVN0cmluZyBleHBlY3RlZE5ld0RvY3VtZW50ID0gCi0JCQkJIkBDSEFSU0VUIFwiSVNPLTg4NTktMVwiO1xyXG4iICsKLQkJCQkiLnRlc3Qge1xyXG4iICsKLQkJCQkiXHRjb2xvcjogIzAwODA0MFxyXG4iICsKLQkJCQkifSI7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygiVGhlIHVwZGF0ZWQgQ1NTIGRvY3VtZW50IGRvZXMgbm90IGVxdWFsIHRoZSBleHBlY3RlZCIsIGV4cGVjdGVkTmV3RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRIVE1MRG9jdW1lbnRUZXh0KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxyXG4iICsgCi0JCQkJIjxIVE1MPjxIRUFEPlxyXG4iICsgCi0JCQkJIjxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIj5cclxuIiArIAotCQkJCSI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1TdHlsZS1UeXBlXCIgY29udGVudD1cInRleHQvY3NzXCI+XHJcbiIgKyAKLQkJCQkiPFRJVExFPjwvVElUTEU+XHJcbiIgKyAKLQkJCQkiPFNUWUxFIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxyXG4iICsgCi0JCQkJIjwhLS1cclxuIiArIAotCQkJCSJCT0RZe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkY5OTtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiSDF7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXRvcDogMTBweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctcmlnaHQ6IDBweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1sZWZ0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLXN0eWxlIDogc29saWQ7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiSDJ7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXRvcDogN3B4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1ib3R0b206IDdweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctbGVmdDogMHB4O1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1zdHlsZSA6IHNvbGlkO1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1jb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIkgze1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy10b3A6IDRweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctcmlnaHQ6IDBweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctYm90dG9tOiA0cHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3Atc3R5bGUgOiBzb2xpZDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3AtY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIUntcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIGhlaWdodDogM3B4O1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJQe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJUSHtcclxuIiArIAotCQkJCSIgIGNvbG9yOiAjRkZGRkNDO1xyXG4iICsgCi0JCQkJIiAgYmFja2dyb3VuZC1jb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIlREe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiBibGFjaztcclxuIiArIAotCQkJCSIgIGJhY2tncm91bmQtY29sb3IgOiB3aGl0ZTtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiLS0+XHJcbiIgKyAKLQkJCQkiPC9TVFlMRT5cclxuIiArIAotCQkJCSI8L0hFQUQ+PEJPRFk+XHJcbiIgKyAKLQkJCQkiPEgxPkhlYWRpbmcgMSBIZWFkaW5nIDE8L0gxPlxyXG4iICsgCi0JCQkJIjxIMj5IZWFkaW5nIDIgSGVhZGluZyAyPC9IMj5cclxuIiArIAotCQkJCSI8SDM+SGVhZGluZyAzIEhlYWRpbmcgMzwvSDM+XHJcbiIgKyAKLQkJCQkiPEhSPlxyXG4iICsgCi0JCQkJIjxQPk5vcm1hbCBUZXh0PC9QPlxyXG4iICsgCi0JCQkJIjxQIHN0eWxlPVwiY29sb3IgOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvciA6IHRlYWw7XCI+Tm9ybWFsIFRleHQgd2l0aCBpbmxpbmUgc3R5bGU8L1A+XHJcbiIgKyAKLQkJCQkiPEhSPlxyXG4iICsgCi0JCQkJIjxUQUJMRSBib3JkZXI9XCIxXCI+XHJcbiIgKyAKLQkJCQkiICA8VEJPRFk+XHJcbiIgKyAKLQkJCQkiICAgIDxUUj5cclxuIiArIAotCQkJCSIgICAgICA8VEggY29sc3Bhbj1cIjNcIj5IZWFkZXIgQ2VsbCBvZiBUYWJsZTwvVEg+XHJcbiIgKyAKLQkJCQkiICAgIDwvVFI+XHJcbiIgKyAKLQkJCQkiICAgIDxUUj5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgPC9UUj5cclxuIiArIAotCQkJCSIgICAgPFRSPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICA8L1RSPlxyXG4iICsgCi0JCQkJIiAgPC9UQk9EWT5cclxuIiArIAotCQkJCSI8L1RBQkxFPlxyXG4iICsgCi0JCQkJIjwvQk9EWT48L0hUTUw+IjsKLQkJcmV0dXJuIHRleHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NlbGVjdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NlbGVjdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDY0M2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTZWxlY3RvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5DU1NTZWxlY3Rvckxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3RvckNvbWJpbmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3Rvckl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3Rvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTaW1wbGVTZWxlY3RvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTU2VsZWN0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjAxKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLCBIMiwgSDMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLCBIMiwgSDMiLCAzLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMSIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMiIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMik7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMyIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQkvLyBzZWUgMjE0NDE2IERvdCBjaGFyIGlzIG5vdCBlc2NhcGVkIGluIFhNTDEwTmFtZXMuakZsZXgKLQkvLyBmb3IgY29tcGxpY2F0aW9ucyBsZWFkaW5nIHRvIHRoaXMgdGVzdCBiZWluZyBjaGFuZ2VkLgotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjAyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkhcXFxcLCBIXFwxLCBIMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSFxcXFwsIEhcXDEsIEgzIiwgMywgMik7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSFxcXFwiLCAxLCAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSFxcXFwiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSFxcMSIsIDEsIDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIXFwxIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigyKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgzIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgzIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjAzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLnBhc3RvcmFsIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS5wYXN0b3JhbCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLnBhc3RvcmFsIiwgMSwgMTAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsicGFzdG9yYWwifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUC5wYXN0b3JhbC5tYXJpbmUiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAucGFzdG9yYWwubWFyaW5lIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUC5wYXN0b3JhbC5tYXJpbmUiLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDIsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117InBhc3RvcmFsIiwgIm1hcmluZSJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqLndhcm5pbmciKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIioud2FybmluZyIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIioud2FybmluZyIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ3YXJuaW5nIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi53YXJuaW5nIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIud2FybmluZyIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi53YXJuaW5nIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsid2FybmluZyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqW2xhbmc9ZnJdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqW2xhbmc9ZnJdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKltsYW5nPWZyXSIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsYW5nPWZyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIltsYW5nPWZyXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiW2xhbmc9ZnJdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiW2xhbmc9ZnJdIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGFuZz1mciJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqI215aWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiojbXlpZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiojbXlpZCIsIDEsIDEwMDAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibXlpZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIjbXlpZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiI215aWQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIjbXlpZCIsIDEsIDEwMDAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJteWlkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjExKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxI3o5OHkiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxI3o5OHkiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMSN6OTh5IiwgMSwgMTAwMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117Ino5OHkifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEgRU0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxIEVNIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEgRU0iLCAzLCAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRU0iLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWICogUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWICogUCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViAqIFAiLCA1LCAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRElWIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViBQICpbaHJlZl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViBQICpbaHJlZl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgUCAqW2hyZWZdIiwgNSwgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRElWIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117ImhyZWYifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiQk9EWSA+IFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkJPRFkgPiBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQk9EWSA+IFAiLCAzLCAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQk9EWSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgT0w+TEkgUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWIE9MID4gTEkgUCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViBPTCA+IExJIFAiLCA3LCA0LCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRElWIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIk9MIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJMSSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg1KTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDYpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIk1BVEggKyBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJNQVRIICsgUCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIk1BVEggKyBQIiwgMywgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIk1BVEgiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIrIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5BREpBQ0VOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTgoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEub3BlbmVyICsgSDIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLm9wZW5lciArIEgyIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEub3BlbmVyICsgSDIiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJvcGVuZXIifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIrIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5BREpBQ0VOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgyIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkVYQU1QTEVbbm90YXRpb249ZGVjaW1hbF0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkVYQU1QTEVbbm90YXRpb249ZGVjaW1hbF0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJFWEFNUExFW25vdGF0aW9uPWRlY2ltYWxdIiwgMSwgMTAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRVhBTVBMRSIsIGZhbHNlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJub3RhdGlvbj1kZWNpbWFsIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjIwKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlNQQU5baGVsbG89XCJDbGV2ZWxhbmRcIl1bZ29vZGJ5ZT1cIkNvbHVtYnVzXCJdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJTUEFOW2hlbGxvPVwiQ2xldmVsYW5kXCJdW2dvb2RieWU9XCJDb2x1bWJ1c1wiXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlNQQU5baGVsbG89XCJDbGV2ZWxhbmRcIl1bZ29vZGJ5ZT1cIkNvbHVtYnVzXCJdIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiU1BBTiIsIGZhbHNlLCAyLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJoZWxsbz1cIkNsZXZlbGFuZFwiIiwgImdvb2RieWU9XCJDb2x1bWJ1c1wiIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjIxKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViA+IFA6Zmlyc3QtY2hpbGQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViA+IFA6Zmlyc3QtY2hpbGQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgPiBQOmZpcnN0LWNoaWxkIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRElWIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmaXJzdC1jaGlsZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQOmZpcnN0LWNoaWxkIEVNIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQOmZpcnN0LWNoaWxkIEVNIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUDpmaXJzdC1jaGlsZCBFTSIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZpcnN0LWNoaWxkIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkVNIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjIzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiogPiBBOmZpcnN0LWNoaWxkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqID4gQTpmaXJzdC1jaGlsZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiogPiBBOmZpcnN0LWNoaWxkIiwgMywgMTAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmaXJzdC1jaGlsZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJBOmxpbmsiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkE6bGluayIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkE6bGluayIsIDEsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiOmxpbmsiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIjpsaW5rIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiOmxpbmsiLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGluayJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJBOmZvY3VzOmhvdmVyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJBOmZvY3VzOmhvdmVyIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQTpmb2N1czpob3ZlciIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZvY3VzIiwgImhvdmVyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkhUTUw6bGFuZyhkZSkgPiBRIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIVE1MOmxhbmcoZGUpID4gUSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkhUTUw6bGFuZyhkZSkgPiBRIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSFRNTCIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGFuZyhkZSkifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjgoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUCA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiLCAyLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQID4gQTpsaW5rIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGluayJ9KTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBLmV4dGVybmFsOnZpc2l0ZWQiLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDEsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117ImV4dGVybmFsIn0pOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ2aXNpdGVkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAjaG9nZTk4ICsgKjpob3ZlciA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQI2hvZ2U5OCArICo6aG92ZXIgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIsIDIsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAjaG9nZTk4ICsgKjpob3ZlciA+IEE6bGluayIsIDUsIDEwMjAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117ImhvZ2U5OCJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIisiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkFESkFDRU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJob3ZlciJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGluayJ9KTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBLmV4dGVybmFsOnZpc2l0ZWQiLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDEsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117ImV4dGVybmFsIn0pOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ2aXNpdGVkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjMwKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEuMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEuMTIzIiwgMSwgMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjMxKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAuMTIzLjQ1NiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUC4xMjMuNDU2IiwgMSwgMik7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUC4xMjMuNDU2IiwgMSwgMjAxLCAyKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAyLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMiLCAiNDU2In0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjMyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiouMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiouMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIuMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIuMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS4xeDMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLjF4MyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLjF4MyIsIDEsIDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjF4MyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMi4xMjMjNDYiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgyLjEyMyM0NiIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgyLjEyMyM0NiIsIDEsIDEwMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDIiLCBmYWxzZSwgMCwgMSwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiNDYifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDMuMXgzIzR0MiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDMuMXgzIzR0MiIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgzLjF4MyM0dDIiLCAxLCAxMDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgzIiwgZmFsc2UsIDAsIDEsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjF4MyJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117IjR0MiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzgoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLjEyM2Y1NjciKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi4xMjNmNTY3IiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLjEyM2Y1NjciLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjNmNTY3In0pOwotCX0KLQotCS8vIEJ1ZyAyMjE1MDQ6IHdoaXRlc3BhY2UgcHJlY2VkaW5nIGEgc2VsZWN0b3Igc2VwYXJhdG9yIHdhcyBjYXVzaW5nIHNlbGVjdG9ycwotCS8vIHRvIGJlIG1lcmdlZAotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjQwKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoImgxLmZpeCAsIGgyLmZpeCwgaDMuZml4ICwgZGl2I2NvbnRhaW5lciIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiaDEuZml4LCBoMi5maXgsIGgzLmZpeCwgZGl2I2NvbnRhaW5lciIsIDQsIDApOwotCQkKLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0JCQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJoMS5maXgiLCAxLCAxMDEsIDApOwotCQkKLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgImgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW10geyJmaXgifSk7Ci0JCQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJoMi5maXgiLCAxLCAxMDEsIDApOwotCQkKLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgImgyIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW10geyJmaXgifSk7Ci0JCQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMik7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJoMy5maXgiLCAxLCAxMDEsIDApOwotCQkKLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgImgzIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW10geyJmaXgifSk7Ci0JCQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMyk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJkaXYjY29udGFpbmVyIiwgMSwgMTAwMDEsIDApOwotCQkKLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgImRpdiIsIGZhbHNlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW10geyJjb250YWluZXIifSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2VsZWN0b3JMaXN0KElDU1NTZWxlY3Rvckxpc3QgbGlzdCwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgaW50IG5TZWxlY3RvcnMsIGludCBuRXJyb3JzKSB7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsIGxpc3QuZ2V0U3RyaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoblNlbGVjdG9ycywgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhuRXJyb3JzLCBsaXN0LmdldEVycm9yQ291bnQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2VsZWN0b3IoSUNTU1NlbGVjdG9yIHNlbGVjdG9yLCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBpbnQgaXRlbXMsIGludCBzcGVjaWZpY2l0eSwgaW50IG5FcnJvcnMpIHsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgc2VsZWN0b3IuZ2V0U3RyaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMsIHNlbGVjdG9yLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHNwZWNpZmljaXR5LCBzZWxlY3Rvci5nZXRTcGVjaWZpY2l0eSgpKTsKLQkJYXNzZXJ0RXF1YWxzKG5FcnJvcnMsIHNlbGVjdG9yLmdldEVycm9yQ291bnQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3IoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgYm9vbGVhbiBpc1VuaXZlcnNhbCwgaW50IG5BdHRyaWJ1dGVzLCBpbnQgbkNsYXNzZXMsIGludCBuSWRzLCBpbnQgblBzZXVkb05hbWVzKSB7Ci0JCWFzc2VydFRydWUoc2VsZWN0b3IgaW5zdGFuY2VvZiBJQ1NTU2ltcGxlU2VsZWN0b3IpOwotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscyhpc1VuaXZlcnNhbCwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5pc1VuaXZlcnNhbCgpKTsKLQkJYXNzZXJ0RXF1YWxzKG5BdHRyaWJ1dGVzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mQXR0cmlidXRlcygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5DbGFzc2VzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mQ2xhc3NlcygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5JZHMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZJRHMoKSk7Ci0JCWFzc2VydEVxdWFscyhuUHNldWRvTmFtZXMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZQc2V1ZG9OYW1lcygpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nW10gaXRlbXMpIHsKLQkJaW50IG5JdGVtcyA9ICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZBdHRyaWJ1dGVzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRBdHRyaWJ1dGUoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mQ2xhc3NlcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0Q2xhc3MoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nW10gaXRlbXMpIHsKLQkJaW50IG5JdGVtcyA9ICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZJRHMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldElEKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nW10gaXRlbXMpIHsKLQkJaW50IG5JdGVtcyA9ICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZQc2V1ZG9OYW1lcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0UHNldWRvTmFtZShpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoSUNTU1NlbGVjdG9ySXRlbSBjb21iaW5hdG9yLCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBpbnQgY29tYmluYXRvclR5cGUpIHsKLQkJYXNzZXJ0VHJ1ZShjb21iaW5hdG9yIGluc3RhbmNlb2YgSUNTU1NlbGVjdG9yQ29tYmluYXRvcik7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsICgoSUNTU1NlbGVjdG9yQ29tYmluYXRvcikgY29tYmluYXRvcikuZ2V0U3RyaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoY29tYmluYXRvclR5cGUsICgoSUNTU1NlbGVjdG9yQ29tYmluYXRvcikgY29tYmluYXRvcikuZ2V0Q29tYmluYXRvclR5cGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTU2VsZWN0b3JMaXN0IGNyZWF0ZVNlbGVjdG9yTGlzdChTdHJpbmcgc3RyKSB7Ci0JCXJldHVybiBuZXcgQ1NTU2VsZWN0b3JMaXN0SW1wbChzdHIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzFlNThiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIENTU1NvdXJjZVBhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW40KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW43KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwOC5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwOC5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0OCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgdm9pZCBzb3VyY2VQYXJzZXJUZXN0KFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIG1vZGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCWlmIChtb2RlLmVxdWFscyhNT0RFX09QRU4pKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbE9wZW4oZmlsZW5hbWUpOwotCQl9Ci0JCWVsc2UgaWYgKG1vZGUuZXF1YWxzKE1PREVfQVBQRU5EKSkgewotCQkJbW9kZWwgPSByZWFkTW9kZWxBcHBlbmQoZmlsZW5hbWUpOwotCQl9Ci0JCWVsc2UgaWYgKG1vZGUuZXF1YWxzKE1PREVfSU5TRVJUKSkgewotCQkJbW9kZWwgPSByZWFkTW9kZWxJbnNlcnQoZmlsZW5hbWUpOwotCQl9Ci0JCVN0cmluZyByZXN1bHQgPSBkdW1wUmVnaW9ucyhtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7Ci0JCWNvbXBhcmVSZXN1bHQocmVzdWx0LCAiQ1NTU291cmNlUGFyc2VyVGVzdC0iICsgZmlsZW5hbWUpOyAvLyROT04tTkxTLTEkCi0JCWNsb3NlTW9kZWwobW9kZWwpOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbE9wZW4oU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbEFwcGVuZChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkrKykgewotCQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgaSwgMCwgc291cmNlLnN1YnN0cmluZyhpLCBpICsgMSkpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbEluc2VydChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkrKykgewotCQkJaW50IHRleHRJbmRleCA9IHNvdXJjZS5sZW5ndGgoKSAtIGkgLSAxOwotCQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgc291cmNlLnN1YnN0cmluZyh0ZXh0SW5kZXgsIHRleHRJbmRleCArIDEpKTsKLQkJfQotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2xvc2VNb2RlbChJQ1NTTW9kZWwgbW9kZWwpIHsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcFJlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWYuYXBwZW5kKGR1bXBSZWdpb25zKGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpKTsKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWRvIHsKLQkJCWJ1Zi5hcHBlbmQoZHVtcE9uZVJlZ2lvbihyZWdpb24pKTsKLQkJCXJlZ2lvbiA9IHJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJd2hpbGUgKHJlZ2lvbiAhPSBudWxsKTsKLQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCArICItLS0tLS0tIiArIEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcE9uZVJlZ2lvbihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1Zi5hcHBlbmQoZG9jdW1lbnRSZWdpb24udG9TdHJpbmcoKSk7Ci0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MICsgIiAgICAiKTsgLy8kTk9OLU5MUy0xJAotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gZG9jdW1lbnRSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJdGVyYXRvciBpID0gcmVnaW9uTGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUlUZXh0UmVnaW9uIHRleHRSZWdpb24gPSAoSVRleHRSZWdpb24pIGkubmV4dCgpOwotCQkJYnVmLmFwcGVuZCh0ZXh0UmVnaW9uLnRvU3RyaW5nKCkpOwotCQkJYnVmLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGZEdW1wID0gZmFsc2U7Ci0KLQlwcml2YXRlIHZvaWQgY29tcGFyZVJlc3VsdChTdHJpbmcgYWN0dWFsLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRHVtcCkgewotCQkJRmlsZVV0aWwuZHVtcFN0cmluZyhhY3R1YWwsIFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCQlhc3NlcnRFcXVhbHMocmVzdWx0LCBhY3R1YWwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9PUEVOID0gIk1PREVfT1BFTiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9BUFBFTkQgPSAiTU9ERV9BUFBFTkQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfSU5TRVJUID0gIk1PREVfSU5TRVJUIjsgLy8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1RleHRQYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5NTQ2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnBhcnNlcnouQ1NTVGV4dFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2Vyei5DU1NUZXh0VG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci0KLQotcHVibGljIGNsYXNzIENTU1RleHRQYXJzZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RUZXh0MSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwMS5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwNC5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0NSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0NygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwNy5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDguY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGV4dFBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gY3JlYXRlU3RyaW5nKGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQlDU1NUZXh0UGFyc2VyIHBhcnNlciA9IG5ldyBDU1NUZXh0UGFyc2VyKENTU1RleHRQYXJzZXIuTU9ERV9TVFlMRVNIRUVULCBzb3VyY2UpOwotCQlTdHJpbmcgcmVzdWx0ID0gZHVtcFJlZ2lvbnMocGFyc2VyLmdldFRva2VuTGlzdCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJDU1NUZXh0UGFyc2VyVGVzdC0iICsgZmlsZW5hbWUpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlU3RyaW5nKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKExpc3QgdG9rZW5zKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCUl0ZXJhdG9yIGkgPSB0b2tlbnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlidWYuYXBwZW5kKGR1bXBPbmVSZWdpb24oKENTU1RleHRUb2tlbikgaS5uZXh0KCkpKTsKLQkJfQotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MICsgIi0tLS0tLS0iICsgRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKENTU1RleHRUb2tlbiB0b2tlbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWJ1Zi5hcHBlbmQoIlsiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmltYWdlKTsKLQkJYnVmLmFwcGVuZCgiXSAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmtpbmQpOwotCQlidWYuYXBwZW5kKCIgLSAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLnN0YXJ0KTsKLQkJYnVmLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmxlbmd0aCk7Ci0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZkR1bXAgPSBmYWxzZTsKLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEdW1wKSB7Ci0JCQlGaWxlVXRpbC5kdW1wU3RyaW5nKGFjdHVhbCwgUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCVN0cmluZyByZXN1bHQgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJCWFzc2VydEVxdWFscyhyZXN1bHQsIGFjdHVhbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzIjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NVcmxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVXJsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4MjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NVcmxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXIuQ1NTU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1JlZ2lvbkNvbnRleHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnV0aWwuQ1NTVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTVXJsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRob3V0IHF1b3RlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRob3V0IHF1b3Rlcywgd2l0aCBzdXJyb3VuZGVkIHNwYWNlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uMigpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCggIHdoaXRlIHNwYWNlLmdpZiAgKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRoIHNpbmdsZSBxdW90ZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjMoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCd3aGl0ZSBzcGFjZS5naWZcJyk7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aCBkb3VibGUgcXVvdGUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb240KCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwid2hpdGUgc3BhY2UuZ2lmXCIpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHR3byB1cmxzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uNSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpOyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogU3R5bGUgcnVsZTogdHdvIHVybHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U3R5bGVSdWxlMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoIkxJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7XHJcbmxpc3Qtc3R5bGUtaW1hZ2U6IHVybChzdHlsZSBpbWFnZS5naWYpOyB9Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlIGFuZCBzdHlsZSBydWxlOiB3aXRob3V0IHF1b3RlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTb21lUnVsZXMxKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzKTtMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpO2xpc3Qtc3R5bGUtaW1hZ2U6IHVybChzdHlsZSBpbWFnZS5naWYpOyB9Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygzLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1syXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMl0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IFR3byB1cmxzIGJ1dCBwYXJlbnRoZXNpcyBhcmUgbWlzc2VkLCBzbyBjb25jYXRlbmF0ZWQgdXJsCi0JICogaXMgaWRlbnRpZmllZC4gQnkgYWRkaW5nIHBhcmVudGhlc2lzLCB1cmxzIGFyZSBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWY7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybHN0eWxlIGltYWdlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZjsgbGlzdC1zdHlsZS1pbWFnZTogdXJsc3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IGZpcnN0IHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAzNywgMCwgIikiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3Qgc2Vjb25kIHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA2MSwgMCwgIigiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogSW1wb3J0IHJ1bGUgYW5kIHN0eWxlIHJ1bGU6IFR3byB1cmxzIGJ1dCBwYXJlbnRoZXNpcyBhcmUgbWlzc2VkLCBzbwotCSAqIGNvbmNhdGVuYXRlZCB1cmwgaXMgaWRlbnRpZmllZC4gQnkgYWRkaW5nIHBhcmVudGhlc2lzLCB1cmxzIGFyZQotCSAqIGNvcnJlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rml4RXJyb3IyKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCS8vIF9fX19fX19fX19fXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5Ci0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzO0xJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsd2hpdGUgc3BhY2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCQkKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcztMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybHdoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBmaXJzdCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMjcsIDAsICIpIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IHNlY29uZCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNTUsIDAsICIoIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlOiBVcmwgaGFzIG9ubHkgb25lIHF1b3RlLCBzbyBpdCBpcyBub3QgaWRlbnRpZmllZCBhcyB1cmwuIEJ5Ci0JICogcmVtb3ZpbmcgcXVvdGUsIHVybCBpcyBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMygpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCi0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzXCIpOyIpOyAvLyROT04tTkxTLTEkCQkKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMCwgdXJscy5sZW5ndGgpOwotCi0JCS8vIGNvcnJlY3QgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDI3LCAxLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCXByaXZhdGUgVXJsSW5mb1tdIHBpY2t1cFVybChJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUxpc3QgdXJscyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiA9IGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCXdoaWxlIChkb2N1bWVudFJlZ2lvbiAhPSBudWxsKSB7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJCUl0ZXJhdG9yIGkgPSByZWdpb25MaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCQlTdHJpbmcgdHlwZSA9IHRleHRSZWdpb24uZ2V0VHlwZSgpOwotCQkJCWlmICh0eXBlLmVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJKSB8fCB0eXBlLmVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJKSkgewotCQkJCQl1cmxzLmFkZChuZXcgVXJsSW5mbyh0eXBlLCBkb2N1bWVudFJlZ2lvbi5nZXRGdWxsVGV4dCh0ZXh0UmVnaW9uKSkpOwotCQkJCX0KLQkJCX0KLQkJCWRvY3VtZW50UmVnaW9uID0gZG9jdW1lbnRSZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0JCXJldHVybiAoVXJsSW5mb1tdKSB1cmxzLnRvQXJyYXkobmV3IFVybEluZm9bdXJscy5zaXplKCldKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFVybEluZm8gewotCQlVcmxJbmZvKFN0cmluZyB0eXBlLCBTdHJpbmcgdXJsKSB7Ci0JCQlmVHlwZSA9IHR5cGU7Ci0JCQlmVXJsID0gQ1NTVXRpbC5leHRyYWN0VXJpQ29udGVudHModXJsKTsKLQkJfQotCi0JCVN0cmluZyBnZXRUeXBlKCkgewotCQkJcmV0dXJuIGZUeXBlOwotCQl9Ci0KLQkJU3RyaW5nIGdldFVybCgpIHsKLQkJCXJldHVybiBmVXJsOwotCQl9Ci0KLQkJcHJpdmF0ZSBTdHJpbmcgZlR5cGU7Ci0JCXByaXZhdGUgU3RyaW5nIGZVcmw7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zdHlsZXNoZWV0cy9TdHlsZVNoZWV0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc3R5bGVzaGVldHMvU3R5bGVTaGVldFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlYWQ4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zdHlsZXNoZWV0cy9TdHlsZVNoZWV0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnN0eWxlc2hlZXRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTSW1wb3J0UnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlUnVsZTsKLQotcHVibGljIGNsYXNzIFN0eWxlU2hlZXRUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gInRlc3RJbXBvcnRzIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSkuZXhpc3RzKCkpIHsKLQkJCVByb2plY3RVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW10ge30pOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGZvciBjeWNsZXMgaW4gaW1wb3J0cy4gSWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZCwgd2Ugc2hvdWxkIG5vdCBnZXQgc3R1Y2sKLQkgKiBpbiBhIGxvb3Agb3IgcmUtaW1wb3J0IHRoZSBzdHlsZXNoZWV0LgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEltcG9ydEN5Y2xlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9jeWNsZTAuY3NzIjsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlhc3NlcnRUcnVlKCJGaWxlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBmaWxlUGF0aCwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKSB7Ci0JCQkJSUNTU0RvY3VtZW50IGRvY3VtZW50ID0gKChJQ1NTTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCWlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElDU1NTdHlsZVNoZWV0KSB7Ci0JCQkJCUNTU1J1bGVMaXN0IGxpc3QgPSAoKElDU1NTdHlsZVNoZWV0KSBkb2N1bWVudCkuZ2V0Q3NzUnVsZXModHJ1ZSk7Ci0JCQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSBhIHRvdGFsIG9mIDMgcnVsZXMgc3VwcGxpZWQgc3R5bGVzaGVldC4iLCBsaXN0LmdldExlbmd0aCgpID09IDMpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCQkJQ1NTUnVsZSBydWxlID0gbGlzdC5pdGVtKGkpOwotCQkJCQkJYXNzZXJ0VHJ1ZSgiUnVsZSBzaG91bGQgYmUgYSBzdHlsZSBydWxlLiBydWxlLmdldFR5cGUoKSA9PSAiICsgcnVsZS5nZXRUeXBlKCksIHJ1bGUuZ2V0VHlwZSgpID09IElDU1NOb2RlLlNUWUxFUlVMRV9OT0RFKTsKLQkJCQkJCS8vIENoZWNrIHRoYXQgdGhlIHJ1bGVzIGFyZSBpbXBvcnRlZCwgaXQgd291bGQgc3RhcnQgd2l0aCB0aGUgbGFzdCBpbXBvcnRlZCBzdHlsZXNoZWV0J3MgcnVsZXMgYW5kIG1vdmUgdXAKLQkJCQkJCWFzc2VydEVxdWFscygiU3R5bGUgcnVsZXMgYXJlIG5vdCBlcXVhbC4iLCAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCksICIjY3ljbGUiICsgKDItaSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGUgc2ltcGxlIGNhc2Ugb2YgYSBiYXNpYyBAaW1wb3J0IG9yIGEgc3R5bGVzaGVldAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUltcG9ydCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvc2l0ZS5jc3MiOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWFzc2VydFRydWUoIkZpbGUgZG9lc24ndCBleGlzdDogIiArIGZpbGVQYXRoLCBmaWxlLmV4aXN0cygpKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ1NTTW9kZWwpIHsKLQkJCQlJQ1NTRG9jdW1lbnQgZG9jdW1lbnQgPSAoKElDU1NNb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSUNTU1N0eWxlU2hlZXQpIHsKLQkJCQkJQ1NTUnVsZUxpc3QgbGlzdCA9ICgoSUNTU1N0eWxlU2hlZXQpIGRvY3VtZW50KS5nZXRDc3NSdWxlcyh0cnVlKTsKLQkJCQkJU3RyaW5nW10gcnVsZXMgPSBuZXcgU3RyaW5nW10geyIjY29udGVudCIsICJhIiwgImE6aG92ZXIifTsKLQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlcmUgc2hvdWxkIGJlIGEgdG90YWwgb2YgMyBydWxlcyBzdXBwbGllZCBzdHlsZXNoZWV0LiIsIGxpc3QuZ2V0TGVuZ3RoKCkgPT0gcnVsZXMubGVuZ3RoKTsKLQotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCQkJQ1NTUnVsZSBydWxlID0gbGlzdC5pdGVtKGkpOwotCQkJCQkJYXNzZXJ0VHJ1ZSgiUnVsZSBzaG91bGQgYmUgYSBzdHlsZSBydWxlLiBydWxlLmdldFR5cGUoKSA9PSAiICsgcnVsZS5nZXRUeXBlKCksIHJ1bGUuZ2V0VHlwZSgpID09IElDU1NOb2RlLlNUWUxFUlVMRV9OT0RFKTsKLQkJCQkJCUNTU1N0eWxlUnVsZSBzdHlsZSA9IChDU1NTdHlsZVJ1bGUpcnVsZTsKLQkJCQkJCWFzc2VydEVxdWFscygiU2VsZWN0b3IgdGV4dCBkaWQgbm90IG1hdGNoLiIsIHJ1bGVzW2ldLCBzdHlsZS5nZXRTZWxlY3RvclRleHQoKS50cmltKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgdGhlIGltcG9ydCBvZiBhIG5vbi1leGlzdGVudCBzdHlsZXNoZWV0Ci0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2ltcG9ydERORS5jc3MiOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWFzc2VydFRydWUoIkZpbGUgZG9lc24ndCBleGlzdDogIiArIGZpbGVQYXRoLCBmaWxlLmV4aXN0cygpKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ1NTTW9kZWwpIHsKLQkJCQlJQ1NTRG9jdW1lbnQgZG9jdW1lbnQgPSAoKElDU1NNb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSUNTU1N0eWxlU2hlZXQpIHsKLQkJCQkJQ1NTUnVsZUxpc3QgbGlzdCA9ICgoSUNTU1N0eWxlU2hlZXQpIGRvY3VtZW50KS5nZXRDc3NSdWxlcyh0cnVlKTsKLQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlcmUgc2hvdWxkIGJlIGEgdG90YWwgb2YgMSBydWxlLiIsIGxpc3QuZ2V0TGVuZ3RoKCkgPT0gMSk7Ci0JCQkJCUNTU1J1bGUgcnVsZSA9IGxpc3QuaXRlbSgwKTsKLQkJCQkJYXNzZXJ0VHJ1ZSgiUnVsZSBzaG91bGQgYmUgYSBzdHlsZSBydWxlLiBydWxlLmdldFR5cGUoKSA9PSAiICsgcnVsZS5nZXRUeXBlKCksIHJ1bGUuZ2V0VHlwZSgpID09IElDU1NOb2RlLklNUE9SVFJVTEVfTk9ERSk7Ci0JCQkJCWFzc2VydEVxdWFscygiU3R5bGVzaGVldCByZWZlcmVuY2UgaXMgZGlmZmVyZW50IHRoYW4gZXhwZWN0ZWQuIiwgKChDU1NJbXBvcnRSdWxlKSBydWxlKS5nZXRIcmVmKCksICJ0aGlzZmlsZWRvZXNudGV4aXN0LmNzcyIpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgdGhhdCBpbXBvcnRzIGNhbiBiZSByZXNvbHZlZCB1c2luZyB0aGUgdmFyaW91cyBzeW50YXhlcyBmb3IgaW1wb3J0LgotCSAqIDx1bD4KLQkgKiA8bGk+QGltcG9ydCB1cmwoImV4YW1wbGUuY3NzIik7PC9saT4KLQkgKiA8bGk+QGltcG9ydCB1cmwoZXhhbXBsZS5jc3MpOzwvbGk+Ci0JICogPGxpPkBpbXBvcnQgImV4YW1wbGUuY3NzIjs8L2xpPgotCSAqIDwvdWw+Ci0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0TWV0aG9kcygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvaW1wb3J0TWV0aG9kcy5jc3MiOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWFzc2VydFRydWUoIkZpbGUgZG9lc24ndCBleGlzdDogIiArIGZpbGVQYXRoLCBmaWxlLmV4aXN0cygpKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ1NTTW9kZWwpIHsKLQkJCQlJQ1NTRG9jdW1lbnQgZG9jdW1lbnQgPSAoKElDU1NNb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSUNTU1N0eWxlU2hlZXQpIHsKLQkJCQkJQ1NTUnVsZUxpc3QgbGlzdCA9ICgoSUNTU1N0eWxlU2hlZXQpIGRvY3VtZW50KS5nZXRDc3NSdWxlcyh0cnVlKTsKLQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlcmUgc2hvdWxkIGJlIGEgdG90YWwgb2YgMyBydWxlcy4iLCBsaXN0LmdldExlbmd0aCgpID09IDMpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCQkJQ1NTUnVsZSBydWxlID0gbGlzdC5pdGVtKGkpOwotCQkJCQkJYXNzZXJ0VHJ1ZSgiUnVsZSBzaG91bGQgYmUgYSBzdHlsZSBydWxlLiBydWxlLmdldFR5cGUoKSA9PSAiICsgcnVsZS5nZXRUeXBlKCksIHJ1bGUuZ2V0VHlwZSgpID09IElDU1NOb2RlLlNUWUxFUlVMRV9OT0RFKTsKLQkJCQkJCUNTU1N0eWxlUnVsZSBzdHlsZSA9IChDU1NTdHlsZVJ1bGUpcnVsZTsKLQkJCQkJCWFzc2VydEVxdWFscygiU2VsZWN0b3IgdGV4dCBkaWQgbm90IG1hdGNoLiIsICIjY29udGVudCIsIHN0eWxlLmdldFNlbGVjdG9yVGV4dCgpLnRyaW0oKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIGZvciB0aGUgaW1wb3J0IG9mIGEgc3R5bGVzaGVldCBpbiBhIHBhcmVudCBkaXJlY3RvcnkKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbXBvcnRGcm9tUGFyZW50RGlyZWN0b3J5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9zdHlsZS9zdWIuY3NzIjsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlhc3NlcnRUcnVlKCJGaWxlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBmaWxlUGF0aCwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKSB7Ci0JCQkJSUNTU0RvY3VtZW50IGRvY3VtZW50ID0gKChJQ1NTTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCWlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElDU1NTdHlsZVNoZWV0KSB7Ci0JCQkJCUNTU1J1bGVMaXN0IGxpc3QgPSAoKElDU1NTdHlsZVNoZWV0KSBkb2N1bWVudCkuZ2V0Q3NzUnVsZXModHJ1ZSk7Ci0JCQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSBhIHRvdGFsIG9mIDEgcnVsZS4iLCBsaXN0LmdldExlbmd0aCgpID09IDEpOwotCQkJCQlDU1NSdWxlIHJ1bGUgPSBsaXN0Lml0ZW0oMCk7Ci0JCQkJCWFzc2VydFRydWUoIlJ1bGUgc2hvdWxkIGJlIGEgc3R5bGUgcnVsZS4gcnVsZS5nZXRUeXBlKCkgPT0gIiArIHJ1bGUuZ2V0VHlwZSgpLCBydWxlLmdldFR5cGUoKSA9PSBJQ1NTTm9kZS5TVFlMRVJVTEVfTk9ERSk7Ci0JCQkJCWFzc2VydEVxdWFscygiU3R5bGVzaGVldCByZWZlcmVuY2UgaXMgZGlmZmVyZW50IHRoYW4gZXhwZWN0ZWQuIiwgKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpLCAiI2NvbnRlbnQiKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliZDA3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1AZm9udC1mYWNlIHsNCi0JZm9udC1mYW1pbHk6ICJTd2lzcyA3MjEiOw0KLQlzcmM6IHVybCgic3dpc3M3MjFibGsucGZyIik7IC8qIFN3aXNzIDcyMSBibGFjayAqLw0KLQlmb250LXN0eWxlOiBub3JtYWwsIGl0YWxpYzsNCi0JZm9udC13ZWlnaHQ6IDgwMCw5MDA7IC8qIG5vdGUgdGhlIGludGVyZXN0aW5nIHByb2JsZW0gdGhhdA0KLQl0aGUgOTAwIHdlaWdodCBpdGFsaWMgZG9lc26BZnQgZXhpc3QgKi8NCi19DQotDQotQGZvbnQtZmFjZSB7DQotCXNyYzogbG9jYWwoIlBhbGF0aW5vIiksDQotCQlsb2NhbCgiVGltZXMgTmV3IFJvbWFuIiksDQotCQlsb2NhbCgiTmV3IFlvcmsiKSwNCi0JCWxvY2FsKCJVdG9waWEiKSwNCi0JCXVybCgiaHR0cDovL3NvbWV3aGVyZS9mcmVlL2ZvbnQiKTsNCi0JZm9udC1mYW1pbHk6IHNlcmlmOw0KLQlmb250LXdlaWdodDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDA7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC12YXJpYW50OiBub3JtYWw7DQotCWZvbnQtc2l6ZTogYWxsDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLQlzcmM6IGxvY2FsKCJBbGFiYW1hIEl0YWxpYyIpLA0KLQl1cmwoaHR0cDovL3d3dy5mb250cy5vcmcvQS9hbGFiYW1hLWl0YWxpYykgZm9ybWF0KCJ0cnVldHlwZSIpOw0KLQlwYW5vc2UtMTogMiA0IDUgMiA1IDQgNSA5IDMgMzsNCi0JZm9udC1mYW1pbHk6IEFsYWJhbWEsIHNlcmlmOw0KLQlmb250LXdlaWdodDogMzAwLCA0MDAsIDUwMDsNCi0JZm9udC1zdHlsZTogaXRhbGljLCBvYmxpcXVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhbWlseVRlc3QuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU0ZvbnRGYW1pbHlUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZjNzg1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhbWlseVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotYS5jIHsKLQlmb250LWZhbWlseTogQ291cmllcjsKLX0KLQotYS5jbiB7Ci0JZm9udC1mYW1pbHk6IENvdXJpZXIgTmV3OwotfQotCi1hLnFjbiB7Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7Ci19Ci0KLWEuY3MgewotCWZvbnQtZmFtaWx5OiAJCUNvbWljCSAgICAJU2FucwkJOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NNb2RlbExvYWRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTTW9kZWxMb2FkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQzMDA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NNb2RlbExvYWRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudGVzdGZpbGVzOw0KLQ0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOw0KLQ0KLXB1YmxpYyBjbGFzcyBDU1NNb2RlbExvYWRUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRNTDRfQ1NTID0gImh0bWw0LmNzcyI7DQotDQotCXB1YmxpYyBDU1NNb2RlbExvYWRUZXN0KCkgew0KLQkJc3VwZXIoIkNTUyBNb2RlbCBMb2FkaW5nIFN1aXRlIik7DQotCX0NCi0NCi0JcHVibGljIHZvaWQgdGVzdExvYWRDU1Nmcm9tU3RyZWFtKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsNCi0JCUlucHV0U3RyZWFtIGlucHV0ID0gbnVsbDsNCi0NCi0JCWlucHV0ID0gQ1NTTW9kZWxMb2FkVGVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKEhUTUw0X0NTUyk7DQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoSFRNTDRfQ1NTLCBpbnB1dCwgbnVsbCk7DQotCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsNCi0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkTW9kZWwgd2FzIG5vdCBhIElDU1NNb2RlbCIsIG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKTsNCi0JCWFzc2VydFRydWUoImNvbnRlbnRzIGFyZSBpbmNvbXBsZXRlIiwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkuaW5kZXhPZigiQmFzaWMgSFRNTCBzdHlsZSBpbmZvcm1hdGlvbiIpID4gNCk7DQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTc3ZjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQHBhZ2Uge3NpemU6IDguNWluIDExaW47bWFyZ2luOiAyY219DQotDQotQHBhZ2Ugew0KLQlzaXplOiBhdXRvOyAvKiBhdXRvIGlzIHRoZSBpbml0aWFsIHZhbHVlICovDQotCW1hcmdpbjogMTAlOw0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7DQotCW1hcmdpbi1sZWZ0OiA0Y207DQotCW1hcmdpbi1yaWdodDogM2NtOw0KLX0NCi1AcGFnZSA6cmlnaHQgew0KLQltYXJnaW4tbGVmdDogM2NtOw0KLQltYXJnaW4tcmlnaHQ6IDRjbTsNCi19DQotDQotQHBhZ2UgbmFycm93IHtzaXplOiA5Y20gMThjbX1AcGFnZSByb3RhdGVkIHtzaXplOiBsYW5kc2NhcGV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDIwNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qIHByaW1pdGl2ZSB2YWx1ZXMgKi8NCi1OVU1CRVJTIHsNCi0gICAgTlVNQkVSOiAxMjMuNDU2Ow0KLSAgICBQRVJDRU5UQUdFOiAxMjMuNDU2JTsNCi0gICAgRU1TOiAxMjMuNDU2ZW07DQotICAgIEVYUzogMTIzLjQ1NmV4Ow0KLSAgICBQWDogMTIzLjQ1NnB4Ow0KLSAgICBQWDI6IC0xMjNweDsNCi0gICAgQ006IDEyMy40NTZjbTsNCi0gICAgTU06IDEyMy40NTZtbTsNCi0gICAgSU46IDEyMy40NTZpbjsNCi0gICAgUFQ6IDEyMy40NTZwdDsNCi0gICAgUEM6IDEyMy40NTZwYzsNCi0gICAgREVHOiAtMTIzLjQ1NmRlZzsNCi0gICAgUkFEOiAxMjMuNDU2cmFkOw0KLSAgICBHUkFEOiAxMjMuNDU2Z3JhZDsNCi0gICAgTVM6IDEyMy40NTZtczsNCi0gICAgUzogMTIzLjQ1NnM7DQotICAgIEhaOiAxMjMuNDU2SHo7DQotICAgIEtIWjogMTIzLjQ1NmtIejsNCi0gICAgRElNRU5TSU9OOiAtMTIzLjQ1Nnp6ejsNCi0gICAgSU5URUdFUjogMTIzOw0KLX0NCi0NCi1TVFJJTkdTIHsNCi0gICAgU1RSSU5HOiAic3RyaW5nIjsNCi0gICAgVVJJOiBVUkwoImh0dHA6Ly93d3cuaWJtLmNvbS8iKTsNCi0gICAgSURFTlQ6IGxlZnQ7DQotICAgIEhBU0g6ICNhYmNkZWY7DQotICAgIFVSQU5HRTogVSsyMEE3Ow0KLSAgICBTTEFTSDogLzsNCi0gICAgQ09NTUE6ICw7DQotICAgIElOSEVSSVRfUFJJTUlUSVZFOiBpbmhlcml0Ow0KLSAgICBBVFRSOiBhdHRyKEtFWSk7DQotICAgIEZPUk1BVDogZm9ybWF0KCJ0cnVlZG9jIik7DQotICAgIExPQ0FMOiBsb2NhbCgiRXhjZWxzaW9yIFJvbWFuIik7DQotfQ0KLQ0KLUZVTkNUSU9OUyB7DQotICAgIENPVU5URVI6IGNvdW50ZXIocGFyLW51bSwgdXBwZXItcm9tYW4pOw0KLSAgICBSRUNUOiByZWN0KDEyLCAzNCwgNTYsIDc4KTsNCi0gICAgUkdCQ09MT1I6IHJnYigyNTUsIDEyOCwgMCk7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9odG1sNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvaHRtbDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODRkODRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9odG1sNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoNCi0gKiBCYXNpYyBIVE1MIHN0eWxlIGluZm9ybWF0aW9uLg0KLSAqLw0KLWh0bWwsDQotYWRkcmVzcywNCi1ibG9ja3F1b3RlLGxpc3RpbmcsDQotYm9keSwgZGQsIGRpdiwNCi1kbCwgZHQsIGZpZWxkc2V0LCBsZWdlbmQsZm9ybSwNCi1mcmFtZSwgZnJhbWVzZXQsDQotaDEsIGgyLCBoMywgaDQsDQotaDUsIGg2LCBub2ZyYW1lcyxub3NjcmlwdCwNCi1vbCwgcCwgdWwsIGNlbnRlciwNCi1kaXIsIGhyLCBtZW51LCBwcmUsIHBsYWludGV4dCwgeG1wICB7IGRpc3BsYXk6IGJsb2NrIH0NCi0NCi1vbAkJCQl7Y291bnRlci1yZXNldDogX2Fub255bW91czsgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsfQ0KLXVsLGRpcixtZW51ICAJe2NvdW50ZXItcmVzZXQ6IF9hbm9ueW1vdXM7IGxpc3Qtc3R5bGUtdHlwZTogZGlzY30NCi1saSAgICAgICAgICAgCXtkaXNwbGF5OiBsaXN0LWl0ZW19DQotbGkJCQkJe2NvdW50ZXItaW5jcmVtZW50OiBfYW5vbnltb3VzfQ0KLQ0KLWhlYWQgICAgICAgICAgICB7IGRpc3BsYXk6IG5vbmUgfQ0KLXRhYmxlICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlIH0NCi10ciAgICAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1yb3cgfQ0KLXRoZWFkICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCB9DQotdGJvZHkgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwIH0NCi10Zm9vdCAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXAgfQ0KLWNvbCAgICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNvbHVtbiB9DQotY29sZ3JvdXAgICAgICAgIHsgZGlzcGxheTogdGFibGUtY29sdW1uLWdyb3VwIH0NCi10ZCwgdGggICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9DQotY2FwdGlvbiAgICAgICAgIHsgZGlzcGxheTogdGFibGUtY2FwdGlvbiB9DQotdGggICAgICAgICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGRlcjt9DQotY2FwdGlvbiAgICAgICAgIHsgdGV4dC1hbGlnbjogY2VudGVyO2hvcml6b250YWwtYWxpZ246dG9wIH0NCi1idXR0b24sIHRleHRhcmVhLA0KLWlucHV0LCBvYmplY3QsIA0KLXNlbGVjdCwgaW1nIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IH0NCi1wcmUscGxhaW50ZXh0LCB4bXAgICB7IHdoaXRlLXNwYWNlOiBwcmUgfQ0KLWgxLCBoMiwgaDMsIGg0LA0KLWg1LCBoNiwgYiwNCi1zdHJvbmcgICAgICAgICAgeyBmb250LXdlaWdodDogYm9sZCB9DQotaSwgY2l0ZSwgZW0sZGZuLA0KLXZhciwgYWRkcmVzcyAgICB7IGZvbnQtc3R5bGU6IGl0YWxpYyB9DQotcHJlLCB0dCwgY29kZSxwbGFpbnRleHQsIHhtcCwNCi1rYmQsIHNhbXAgICAgICAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlIH0NCi1vbCAgICAgICAgICAgICAgeyBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWwgfQ0KLWJyOmJlZm9yZSAgICAgICB7IGNvbnRlbnQ6ICJcQSIgfQ0KLWNlbnRlciAgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlciB9DQotc3ViICAgICAgICAgICAgIHsgdmVydGljYWwtYWxpZ246IHN1YiB9DQotc3VwICAgICAgICAgICAgIHsgdmVydGljYWwtYWxpZ246IHN1cGVyIH0NCi11LCBpbnMgICAgICAgICAgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9DQotaW5wdXQJCQl7IHRleHQtZGVjb3JhdGlvbjogbm9uZSB9DQotYnV0dG9uCQkJeyB3aGl0ZS1zcGFjZTogbm93cmFwIH0NCi1hW2hyZWZdCQkJeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9DQotDQotLyoNCi0gKiBzdHlsZXMgdGhhdCBtYXkgYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgdXNlciBhZ2VudC4NCi0gKiBUaGlzIHBhcnQgbWF5IG5lZWQgdG8gbW92ZSBvdXQgYW5kIHB1dCBpbnRvIGRpZmZlcmVudCBjc3MgZmlsZXMuDQotICovDQotYm9keSAgICAgICAgICAgIHsgbGluZS1oZWlnaHQ6IDEuMTJlbSB9DQotaDEgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAyZW07IG1hcmdpbjogLjY3ZW0gMCB9DQotaDIgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxLjVlbTsgbWFyZ2luOiAuNzVlbSAwIH0NCi1oMyAgICAgICAgICAgICAgeyBmb250LXNpemU6IDEuMTdlbTsgbWFyZ2luOiAuODNlbSAwIH0NCi1oNCwgcCx1bCwNCi1maWVsZHNldCwgZm9ybSwNCi1vbCwgZGwsIGRpciwNCi1tZW51ICAgICAgICAgICAgeyBtYXJnaW46IDEuMTJlbSAwIH0NCi1ibG9ja3F1b3RlICAgICAgeyBtYXJnaW46IDFlbSA0MHB4IH0NCi1oNSAgICAgICAgICAgICAgeyBmb250LXNpemU6IC44M2VtOyBtYXJnaW46IDEuNWVtIDAgfQ0KLWg2ICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogLjc1ZW07IG1hcmdpbjogMS42N2VtIDAgfQ0KLWJsb2NrcXVvdGUgICAgICB7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tcmlnaHQ6IDQwcHggfQ0KLWJpZyAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogbGFyZ2VyIH0NCi1zbWFsbCwgc3ViLCBzdXAgeyBmb250LXNpemU6IHNtYWxsZXIgfQ0KLXMsIHN0cmlrZSwgZGVsICB7IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIH0NCi1ociAgICAgICAgICAgICAgeyBib3JkZXI6IDFweCBpbnNldCB9DQotb2wsIHVsLCBkaXIsDQotbWVudSwgZGQgICAgICAgIHsgbWFyZ2luLWxlZnQ6IDQwcHg7Ym9yZGVyOjBweCB9DQotb2wgdWwsIHVsIG9sLA0KLXVsIHVsLCBvbCBvbCAgICB7IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDAgfQ0KLWFiYnIsIGFjcm9ueW0gICB7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwczsgbGV0dGVyLXNwYWNpbmc6IDAuMWVtIH0NCi1hW2hyZWZdICAgICAgICAgeyBjb2xvcjpibHVlO30NCi1zZWxlY3QJCQl7YmFja2dyb3VuZC1jb2xvcjogd2luZG93O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6IG5vcm1hbDt9DQotdGV4dGFyZWEJCXtib3JkZXI6IDJweCBpbnNldDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2V9DQotdGV4dGFyZWEsDQotaW5wdXQgCQkJe2JhY2tncm91bmQtY29sb3I6IHdpbmRvd30NCi1pbnB1dCwNCi1pbnB1dFt0eXBlPXRleHRdLA0KLWlucHV0W3R5cGU9cGFzc3dvcmRdIHtib3JkZXI6IDJweCBpbnNldDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQ0KLS8qIGZvbGxvd2luZyB1cGNhc2VkIFRZUEUgaXMgZm9yIHdvcmthcm91bmQgdGhlIFdUUCBNMiBidWcgb2Ygbm90IHNldHRpbmcgZGVmYXVsdCBjb250ZW50IHR5cGUgKi8NCi1pbnB1dFtUWVBFPXN1Ym1pdF0saW5wdXRbVFlQRT1yZXNldF0saW5wdXRbVFlQRT1idXR0b25dLGlucHV0W1RZUEU9Y2FuY2VsXSwNCi1idXR0b24sDQotaW5wdXRbdHlwZT1idXR0b25dLA0KLWlucHV0W3R5cGU9cmVzZXRdLA0KLWlucHV0W3R5cGU9Y2FuY2VsXSwNCi1pbnB1dFt0eXBlPXN1Ym1pdF0ge2JhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7IGJvcmRlcjogMnB4IG91dHNldDsgZm9udC1zaXplOjEzcHg7DQotCQkJCQlmb250LWZhbWlseTpzYW5zLXNlcmlmO3RleHQtYWxpZ246IGNlbnRlcjtmb250LXdlaWdodDogbm9ybWFsO30NCi1pbnB1dFt0eXBlPWltYWdlXSwNCi1pbnB1dFt0eXBlPWNoZWNrYm94XSwNCi1pbnB1dFt0eXBlPXJhZGlvXSAge2JvcmRlcjogbm9uZSB9DQotaW5wdXRbdHlwZT1oaWRkZW5dICB7Ym9yZGVyOiBub25lIH0NCi1pbWcJCQkJe2JvcmRlcjogMHB4IG5vbmV9DQotbGlzdGluZyAgICAgICAgIHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOiBtZWRpdW07d2hpdGUtc3BhY2U6IHByZTsgbWFyZ2luOiAxZW0gMDt9DQotdGJvZHksdGhlYWQsdGZvb3QgICAgIHt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO30NCi1ibGluayAJCQl7dGV4dC1kZWNvcmF0aW9uOiBibGluazt9DQotDQotaHIgCQl7bWFyZ2luOiAwLjVlbSBhdXRvIDAuNWVtIGF1dG87fQ0KLWNhcHRpb24gIHtib3JkZXI6IDBweCBub25lO21hcmdpbjogMHB4OyBwYWRkaW5nOjBweCAwcHggNHB4IDBweDt9DQotdGQsIHRoLA0KLXRhYmxlICAgIHtib3JkZXI6IDRweCBub25lO30NCi1idXR0b24gICB7cGFkZGluZzogM3B4IDVweDt0ZXh0LWFsaWduOiBjZW50ZXI7dmVydGljYWwtYWxpZ246IG1pZGRsZTt9DQotYnV0dG9uLHRleHRhcmVhLGlucHV0ICAge3ZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtjb2xvcjpibGFjaztmb250LXN0eWxlOm5vbmU7fQ0KLXNlbGVjdCB7dmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO30NCi1pbnB1dFt0eXBlPWltYWdlXSAge3ZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTt9DQotbGkgICB7bWluLWhlaWdodDoxLjJlbX0NCi1idXR0b24ge21pbi1oZWlnaHQ6MS44ZW19DQotZGl2LHRyLGZvcm0ge21pbi1oZWlnaHQ6MS4yZW19DQotdGFibGUsdGQge21pbi13aWR0aDoxLjJlbTttaW4taGVpZ2h0OjEuMmVtfQ0KLQ0KLS8qIG5lc3RlZCBsaXN0cyBoYXZlIG5vIHRvcC9ib3R0b20gbWFyZ2lucyAqLw0KLXVsIHVsLCAgIHVsIG9sLCAgIHVsIGRpciwgICB1bCBtZW51LCAgIHVsIGRsLA0KLW9sIHVsLCAgIG9sIG9sLCAgIG9sIGRpciwgICBvbCBtZW51LCAgIG9sIGRsLA0KLWRpciB1bCwgIGRpciBvbCwgIGRpciBkaXIsICBkaXIgbWVudSwgIGRpciBkbCwNCi1tZW51IHVsLCBtZW51IG9sLCBtZW51IGRpciwgbWVudSBtZW51LCBtZW51IGRsLA0KLWRsIHVsLCAgIGRsIG9sLCAgIGRsIGRpciwgICBkbCBtZW51LCAgIGRsIGRsIAl7bWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMDt9DQotDQotLyogMiBkZWVwIHVub3JkZXJlZCBsaXN0cyB1c2UgYSBjaXJjbGUgKi8NCi1vbCB1bCwgICB1bCB1bCwgICBtZW51IHVsLCAgIGRpciB1bCwNCi1vbCBtZW51LCB1bCBtZW51LCBtZW51IG1lbnUsIGRpciBtZW51LA0KLW9sIGRpciwgIHVsIGRpciwgIG1lbnUgZGlyLCAgZGlyIGRpciAJe2xpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO30NCi0NCi0vKiAzIGRlZXAgKG9yIG1vcmUpIHVub3JkZXJlZCBsaXN0cyB1c2UgYSBzcXVhcmUgKi8NCi1vbCBvbCB1bCwgICAgIG9sIHVsIHVsLCAgICAgb2wgbWVudSB1bCwgICAgIG9sIGRpciB1bCwNCi1vbCBvbCBtZW51LCAgIG9sIHVsIG1lbnUsICAgb2wgbWVudSBtZW51LCAgIG9sIGRpciBtZW51LA0KLW9sIG9sIGRpciwgICAgb2wgdWwgZGlyLCAgICBvbCBtZW51IGRpciwgICAgb2wgZGlyIGRpciwNCi11bCBvbCB1bCwgICAgIHVsIHVsIHVsLCAgICAgdWwgbWVudSB1bCwgICAgIHVsIGRpciB1bCwNCi11bCBvbCBtZW51LCAgIHVsIHVsIG1lbnUsICAgdWwgbWVudSBtZW51LCAgIHVsIGRpciBtZW51LA0KLXVsIG9sIGRpciwgICAgdWwgdWwgZGlyLCAgICB1bCBtZW51IGRpciwgICAgdWwgZGlyIGRpciwNCi1tZW51IG9sIHVsLCAgIG1lbnUgdWwgdWwsICAgbWVudSBtZW51IHVsLCAgIG1lbnUgZGlyIHVsLA0KLW1lbnUgb2wgbWVudSwgbWVudSB1bCBtZW51LCBtZW51IG1lbnUgbWVudSwgbWVudSBkaXIgbWVudSwNCi1tZW51IG9sIGRpciwgIG1lbnUgdWwgZGlyLCAgbWVudSBtZW51IGRpciwgIG1lbnUgZGlyIGRpciwNCi1kaXIgb2wgdWwsICAgIGRpciB1bCB1bCwgICAgZGlyIG1lbnUgdWwsICAgIGRpciBkaXIgdWwsDQotZGlyIG9sIG1lbnUsICBkaXIgdWwgbWVudSwgIGRpciBtZW51IG1lbnUsICBkaXIgZGlyIG1lbnUsDQotZGlyIG9sIGRpciwgICBkaXIgdWwgZGlyLCAgIGRpciBtZW51IGRpciwgICBkaXIgZGlyIGRpciB7IGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO30NCi0NCi0vKioNCi0gKiBXZSBkbyBub3Qgd3JpdGUgY29kZXMgdG8gc3VwcG9ydCBzb21lIGVsZW1lbnRzLiBUaGlzIHBhcnQgZGVmaW5lcyBwcm9wZXJ0aWVzIGZvciB0aGVtIA0KLSAqIHRvIGltcHJvdmUgdGhlIGxvb2sgb2YgdGhlc2UgZWxlbWVudHMuDQotICovDQotYXBwbGV0IHtib3JkZXI6IDFweCBzb2xpZDt9DQotZmllbGRzZXQge2JvcmRlcjogMnB4IGdyb292ZTt9DQotYXBwbGV0LGlmcmFtZSB7ZGlzcGxheTppbmxpbmUtYmxvY2s7IGJvcmRlcjozcHggaW5zZXQ7IH0NCi1vYmplY3Qge2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowcHggbm9uZTt9DQotDQotDQotLyogDQotICogU2V0cyByaWdodCBtYXJnaW4gdG8gaGF2ZSBnYXAgYmV0d2VlbiB3aWRnZXRzLg0KLSAqLw0KLWlucHV0LHRleHRhcmVhLGJ1dHRvbgkgeyBtYXJnaW4tcmlnaHQ6IDJweDt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhYzJmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVswLCAzXSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVszLCA5XSAoew0KLQ0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNiwgDQotWzksIDIxXSAoY29sb3I6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzIxLCAyNF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMjQsIDI1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1LCAzMF0gKA0KLQ0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC01LCANCi1bMzAsIDU0XSAoYmFja2dyb3VuZC1jb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE5LTI0LCANCi1bNTQsIDU5XSAoDQotCQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTUsIA0KLVs1OSwgNjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjAsIDYyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTU1MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1bMCwgMjNdIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzIzLCAyNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsyNCwgMjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjYsIDYxXSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLCBDb250ZXh0UmVnaW9uLS0+IFM6IDIxLTIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs2MSwgNjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bNjIsIDY0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY0LCA5Nl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bOTYsIDk3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzk3LCA5OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5OSwgMTU1XSAoQElNUE9SVCAnaG9nZS5jc3MnICxtZWRpYTEsbWVkaWEyLCxtZWRpYTMgbWVkaWE0LG1lZGlhNSApDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMTktMjAsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyMC0yNiwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI2LTI3LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjctMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNCwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLzQyLCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDQyLTQ4LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDgtNDksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0OS01NS81NiwgDQotWzE1NSwgMTY5XSAoQGltcG9ydCBtZWRpYTYpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiA4LTE0LCANCi1bMTY5LCAxNzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTcwLCAyMjFdICgNCi0NCi08IS0tIC8qIGhvZ2Vob2dlICovDQotDQotLS0+DQotDQotLyogY29tbWVudCAyICovDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBDRE86IDQtOC85LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDktMjMsIENvbnRleHRSZWdpb24tLT4gUzogMjMtMjcsIENvbnRleHRSZWdpb24tLT4gQ0RDOiAyNy0zMC8zNCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAzNC00OSwgQ29udGV4dFJlZ2lvbi0tPiBTOiA0OS01MSwgDQotWzIyMSwgMjI3XSAoa3Vzbw0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC82LCANCi0NCi0tLS0tLS0tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmExZGFkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1bMCwgMjldIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOSwgDQotWzI5LCAzMF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVszMCwgNTddICgNCi0NCi0vKiBTYW1wbGUgU3R5bGVzICovDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA0LTIzLCBDb250ZXh0UmVnaW9uLS0+IFM6IDIzLTI3LCANCi1bNTcsIDYyXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzYyLCA2Nl0gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs2NiwgNzldIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bNzksIDgwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzgwLCA4M10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bODMsIDEyMF0gKGJhY2tncm91bmQtY29sb3IgOiByZ2IoMTgxLCAyNTMsIDIxMSkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyMy0yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjYtMjcvMjgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzMy0zNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzYtMzcsIA0KLVsxMjAsIDEyMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjEsIDEyNF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTI0LCAxNDNdICh0ZXh0LWFsaWduIDogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE5LCANCi1bMTQzLCAxNDRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTQ0LCAxNDddICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE0NywgMTg2XSAoZm9udC1mYW1pbHkgOiAiSGVpc2VpIE1pbmNobyBXMyIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDM0LTM5LCANCi1bMTg2LCAxODhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTg4LCAxODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTg5LCAxOTNdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTkzLCAyMDVdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDUsIDIwN10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsyMDcsIDIyNF0gKG1hcmdpbi1sZWZ0IDogNGNtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzIyNCwgMjI1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsyMjUsIDIyNl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMjYsIDIzMF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMzAsIDI0M10gKEBtZWRpYSBhdXJhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzI0MywgMjQ3XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzI0NywgMjU1XSAoUC5oZWlkaSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNy84LCANCi1bMjU1LCAyNjBdICh7DQotCQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzI2MCwgMjgxXSAoYXppbXV0aCA6IGNlbnRlci1sZWZ0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMjEsIA0KLVsyODEsIDI4Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyODIsIDI4Nl0gKA0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI4NiwgMzA1XSAoZWxldmF0aW9uIDogMTIuM2RlZykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xOSwgDQotWzMwNSwgMzA2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMwNiwgMzEwXSAoDQotCQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMzEwLCAzMjddIChwYXVzZSA6IDMwbXMgMS42cykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgDQotWzMyNywgMzMwXSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVszMzAsIDMzMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMzEsIDMzM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMzMsIDMzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMzQsIDMzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWQ5MTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA0OV0gKEBpbXBvcnQgdXJsKCJob2dlLmNzcyIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTIzLCANCi1bNDksIDUwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzUwLCA1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MiwgODddIChAaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDgtMjEsIENvbnRleHRSZWdpb24tLT4gUzogMjEtMjIsIENvbnRleHRSZWdpb24tLT4gVVJJOiAyMi0zNSwgDQotWzg3LCA4OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs4OCwgOTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTAsIDEyMl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bMTIyLCAxMjNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTIzLCAxMjVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI1LCAxNjZdIChASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDE5LTI1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMjUtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyNi0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDMzLTM0LzM1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMzUtNDEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzEsIDE4NF0gKEBtZWRpYSBwcmludCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzE4NCwgMTg5XSAoew0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS81LCANCi1bMTg5LCAxOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTkwLCAxOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTk0LCAyMDZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDYsIDIxMV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzIxMSwgMjEyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzIxMiwgMjE2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzIxNiwgMjI3XSAoaDEsIGgyLCBoMyApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogOC0xMC8xMSwgDQotWzIyNywgMjMwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyMzAsIDI1M10gKGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTIzLCANCi1bMjUzLCAyNTVdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTUsIDI1Nl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyNTYsIDI1OF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTgsIDI2NF0gKGgxIGVtICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAzLTUvNiwgDQotWzI2NCwgMjY3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyNjcsIDI3OF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzI3OCwgMjgwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgwLCAyODFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjgxLCAyODNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgzLCAyOTddIChkaXYgcCAqW2hyZWZdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAzLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNy04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA4LTEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDEyLTEzLzE0LCANCi1bMjk3LCAzMDBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMwMCwgMzExXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMzExLCAzMTNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTMsIDMxNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMTQsIDMxNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTYsIDMyNV0gKGJvZHkgPiBQICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszMjUsIDMyOF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzI4LCAzNDRdIChsaW5lLWhlaWdodDogMS4zKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNiwgDQotWzM0NCwgMzQ2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ2LCAzNDddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzQ3LCAzNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ5LCAzNjFdIChkaXYgb2w+bGkgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA5LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTAtMTEvMTIsIA0KLVszNjEsIDM2M10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVszNjMsIDM2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszNjQsIDM2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNjYsIDM3NV0gKG1hdGggKyBwICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszNzUsIDM3OF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzc4LCAzOTJdICh0ZXh0LWluZGVudDogMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTQsIA0KLVszOTIsIDM5NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NCwgMzk1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM5NSwgMzk3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NywgNDEyXSAoaDEub3BlbmVyICsgaDIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xNC8xNSwgDQotWzQxMiwgNDE1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0MTUsIDQzMV0gKG1hcmdpbi10b3A6IC01bW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE2LCANCi1bNDMxLCA0MzNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzMsIDQzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0MzQsIDQzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzYsIDQ0Nl0gKGgxW3RpdGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDMtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA4LTkvMTAsIA0KLVs0NDYsIDQ0OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDQ5LCA0NjBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs0NjAsIDQ2MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NjEsIDQ2M10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2MywgNDY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzQ2NCwgNDY2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2NiwgNDg2XSAoc3BhbltjbGFzcz1leGFtcGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDUtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDExLTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNDg2LCA0ODldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ4OSwgNTAwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTAwLCA1MDFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTAxLCA1MDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDMsIDUwNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1MDQsIDUwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDYsIDU1MF0gKHNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyMi0yMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDIzLTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyNC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDMxLTMyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMzItNDIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogNDItNDMvNDQsIA0KLVs1NTAsIDU1M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTUzLCA1NjRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs1NjQsIDU2NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1NjUsIDU2N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU2NywgNTY4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzU2OCwgNTcwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU3MCwgNTkwXSAoYVtyZWx+PSJjb3B5cmlnaHQiXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDUtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTgtMTkvMjAsIA0KLVs1OTAsIDU5M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTkzLCA2MDRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2MDQsIDYwNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwNiwgNjA3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwNywgNjA5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwOSwgNjM4XSAoYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMjcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjctMjgvMjksIA0KLVs2MzgsIDY0MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNjQxLCA2NTJdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2NTIsIDY1NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NCwgNjU1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY1NSwgNjU3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NywgNjY4XSAoKltsYW5nPWZyXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA5LTEwLzExLCANCi1bNjY4LCA2NzFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY3MSwgNjg1XSAoZGlzcGxheSA6IG5vbmUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMC0xNCwgDQotWzY4NSwgNjg3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjg3LCA2ODhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjg4LCA2OTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjkwLCA3MDRdICgqW2xhbmd8PSJlbiJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzcwNCwgNzA3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3MDcsIDcxOF0gKGNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTExLCANCi1bNzE4LCA3MjBdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjAsIDcyMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3MjEsIDcyM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjMsIDc1MF0gKERJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDktMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxOC0xOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDE5LTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI0LTI1LzI3LCANCi1bNzUwLCA3NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzc1MywgODAwXSAodm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzQtNDEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQxLTQyLzQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0My00NywgDQotWzgwMCwgODAyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODAyLCA4MDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODAzLCA4MDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODA1LCA4MzddIChESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDEwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAyMi0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyOS0zMC8zMiwgDQotWzgzNywgODQwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs4NDAsIDg4Nl0gKHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NiwgDQotWzg4NiwgODg4XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODg4LCA4ODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODg5LCA4OTFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODkxLCA5MDJdICgqLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMC8xMSwgDQotWzkwMiwgOTA1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MDUsIDkxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5MTcsIDkxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkxOSwgOTIwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzkyMCwgOTIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkyMiwgOTMyXSAoLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC05LzEwLCANCi1bOTMyLCA5MzVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzkzNSwgOTQ3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk0NywgOTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTQ5LCA5NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTUwLCA5NTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTUyLCA5NjRdIChIMS5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDItMTEvMTIsIA0KLVs5NjQsIDk2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTY3LCA5NzldIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTc5LCA5ODFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODEsIDk4Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5ODIsIDk4NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODQsIDEwMDJdIChwLnBhc3RvcmFsLm1hcmluZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEwLTE3LzE4LCANCi1bMTAwMiwgMTAwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAwNSwgMTAxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsxMDE3LCAxMDE5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAxOSwgMTAyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDIwLCAxMDIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMjIsIDEwMzRdIChoMSNjaGFwdGVyMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfSUQ6IDItMTEvMTIsIA0KLVsxMDM0LCAxMDM3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDM3LCAxMDU1XSAodGV4dC1hbGlnbjogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE4LCANCi1bMTA1NSwgMTA1N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwNTcsIDEwNThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTA1OCwgMTA2MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDYwLCAxMDgwXSAoZGl2ID4gcDpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDctMTkvMjAsIA0KLVsxMDgwLCAxMDgzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDgzLCAxMDk3XSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMTA5NywgMTA5OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwOTksIDExMDBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTEwMCwgMTEwMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTAyLCAxMTE5XSAocDpmaXJzdC1jaGlsZCBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEzLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTQtMTYvMTcsIA0KLVsxMTE5LCAxMTIyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMTIyLCAxMTQwXSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTE0MCwgMTE0Ml0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNDIsIDExNDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE0MywgMTE0NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQ1LCAxMTYzXSAoKiA+IGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLzIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA1LTE3LzE4LCANCi1bMTE2MywgMTE2Nl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTE2NiwgMTE4NF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExODQsIDExODZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTg2LCAxMTg3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExODcsIDExODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4OSwgMTIwM10gKGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzEyMDMsIDEyMDZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyMDYsIDEyMjRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMjI0LCAxMjI2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTIyNiwgMTIyN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjI3LCAxMjI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjksIDEyNDhdIChhLmV4dGVybmFsOnZpc2l0ZWQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMTAtMTgvMTksIA0KLVsxMjQ4LCAxMjUxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjUxLCAxMjYyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMTI2MiwgMTI2NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNjQsIDEyNjVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTI2NSwgMTI2N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY3LCAxMjgxXSAoYTpmb2N1czpob3ZlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTEzLzE0LCANCi1bMTI4MSwgMTI4NF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI4NCwgMTMwMV0gKGJhY2tncm91bmQ6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE3LCANCi1bMTMwMSwgMTMwM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzMDMsIDEzMDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTMwNCwgMTMwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzA2LCAxMzIwXSAoaHRtbDpsYW5nKGZyKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA0LTEzLzE0LCANCi1bMTMyMCwgMTMyM10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTMyMywgMTM0MF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzEzNDAsIDEzNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzQyLCAxMzQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzNDMsIDEzNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0NSwgMTM1OV0gKGh0bWw6bGFuZyhkZSkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzNTksIDEzNjJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzNjIsIDEzOTVdIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzEzOTUsIDEzOTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzk3LCAxMzk4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzOTgsIDE0MDBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQwMCwgMTQxNF0gKDpsYW5nKGZyKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDE0LCAxNDE3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDE3LCAxNDM0XSAocXVvdGVzOiAnPDwnICc+PicpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LCANCi1bMTQzNCwgMTQzNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MzYsIDE0MzddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQzNywgMTQzOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM5LCAxNDUzXSAoOmxhbmcoZGUpID4gUSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xMy8xNCwgDQotWzE0NTMsIDE0NTZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE0NTYsIDE0ODldIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzE0ODksIDE0OTFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDkxLCAxNDkyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0OTIsIDE0OTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5NCwgMTUwOV0gKHA6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTQvMTUsIA0KLVsxNTA5LCAxNTEyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNTEyLCAxNTI2XSAoZm9udC1zaXplOiAzZW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMS0xNCwgDQotWzE1MjYsIDE1MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyNywgMTUyOF0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTUyOCwgMTU0N10gKGZvbnQtd2VpZ2h0OiBub3JtYWwpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxNTQ3LCAxNTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU0OSwgMTU1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTUwLCAxNTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NTIsIDE1NjldIChwLnNwZWNpYWw6YmVmb3JlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0xNi8xNywgDQotWzE1NjksIDE1NzFdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTU3MSwgMTU5MV0gKGNvbnRlbnQ6ICJTcGVjaWFsISAiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDktMjAsIA0KLVsxNTkxLCAxNTkyXSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNTkyLCAxNTkzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE1OTMsIDE1OTVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU5NSwgMTYxOF0gKHAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA5LTIyLzIzLCANCi1bMTYxOCwgMTYyMF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjIwLCAxNjM0XSAoY29sb3I6ICNmZmQ4MDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDctMTQsIA0KLVsxNjM0LCAxNjM1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNjM1LCAxNjM2XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE2MzYsIDE2MzhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTYzOCwgMTY0M10gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVsxNjQzLCAxNjQ1XSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE2NDUsIDE3MDNdIChmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0My00NC80NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDUtNTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDUxLTUyLzUzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA1My01OCwgDQotWzE3MDMsIDE3MDRdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3MDQsIDE3MDVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTcwNSwgMTcwN10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzA3LCAxNzIxXSAoKjpsYW5nKGphLWpwKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTcyMSwgMTcyM10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzIzLCAxNzY4XSAoZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NSwgDQotWzE3NjgsIDE3NjldICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3NjksIDE3NzBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3MCwgMTc3Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzcyLCAxNzg2XSAoKjpsYW5nKHpoLXR3KSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTc4NiwgMTc4OF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzg4LCAxODI2XSAoZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogNi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTAtMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE0LTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMzLTM4LCANCi1bMTgyNiwgMTgyN10gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTgyNywgMTgyOF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxODI4LCAxODMwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZDkxMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NTQgKzAsMCBAQAotWzAsIDIxXSAoQGNoYXJzZXQgIklTTy04ODU5LTEiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENIQVJTRVQ6IDAtOC85LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOS0yMSwgDQotWzIxLCAyMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsyMiwgMjZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjYsIDQ5XSAoQGltcG9ydCB1cmwoImhvZ2UuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjMsIA0KLVs0OSwgNTBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bNTAsIDUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzUyLCA4N10gKEBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogOC0yMSwgQ29udGV4dFJlZ2lvbi0tPiBTOiAyMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDIyLTM1LCANCi1bODcsIDg4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzg4LCA5MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MCwgMTIyXSAoQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi8pDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMTktMzIsIA0KLVsxMjIsIDEyM10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsxMjMsIDEyNV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjUsIDE2Nl0gKEBJTVBPUlQgJ2hvZ2UuY3NzJyBtZWRpYTEsbWVkaWEyICwgbWVkaWEzKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMTktMjUsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAyNS0yNiwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDI2LTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMzMtMzQvMzUsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAzNS00MSwgDQotWzE2NiwgMTY3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzE2NywgMTcxXSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE3MSwgMTg0XSAoQG1lZGlhIHByaW50ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBNRURJQTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA3LTEyLzEzLCANCi1bMTg0LCAxODldICh7DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsxODksIDE5MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxOTAsIDE5NF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxOTQsIDIwNl0gKEBwYWdlIDpsZWZ0ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBQQUdFOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfUEFHRV9TRUxFQ1RPUjogNi0xMS8xMiwgDQotWzIwNiwgMjExXSAoew0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS81LCANCi1bMjExLCAyMTJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjEyLCAyMTZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjE2LCAyMjddIChoMSwgaDIsIGgzICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDItMy80LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA4LTEwLzExLCANCi1bMjI3LCAyMzBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzIzMCwgMjUzXSAoZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMjMsIA0KLVsyNTMsIDI1NV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI1NSwgMjU2XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzI1NiwgMjU4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI1OCwgMjY0XSAoaDEgZW0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDItMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDMtNS82LCANCi1bMjY0LCAyNjddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzI2NywgMjc4XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMjc4LCAyODBdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyODAsIDI4MV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyODEsIDI4M10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyODMsIDI5N10gKGRpdiBwICpbaHJlZl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDMtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA3LTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDgtMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTItMTMvMTQsIA0KLVsyOTcsIDMwMF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzAwLCAzMTFdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVszMTEsIDMxM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzMxMywgMzE0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzMxNCwgMzE2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzMxNiwgMzI1XSAoYm9keSA+IFAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTgvOSwgDQotWzMyNSwgMzI4XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszMjgsIDM0NF0gKGxpbmUtaGVpZ2h0OiAxLjMpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE2LCANCi1bMzQ0LCAzNDZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNDYsIDM0N10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszNDcsIDM0OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNDksIDM2MV0gKGRpdiBvbD5saSBwICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAzLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDktMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMC0xMS8xMiwgDQotWzM2MSwgMzYzXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzM2MywgMzY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM2NCwgMzY2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM2NiwgMzc1XSAobWF0aCArIHAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTgvOSwgDQotWzM3NSwgMzc4XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszNzgsIDM5Ml0gKHRleHQtaW5kZW50OiAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNCwgDQotWzM5MiwgMzk0XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzk0LCAzOTVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzk1LCAzOTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzk3LCA0MTJdIChoMS5vcGVuZXIgKyBoMiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDItOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTE0LzE1LCANCi1bNDEyLCA0MTVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQxNSwgNDMxXSAobWFyZ2luLXRvcDogLTVtbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTYsIA0KLVs0MzEsIDQzM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQzMywgNDM0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzQzNCwgNDM2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQzNiwgNDQ2XSAoaDFbdGl0bGVdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDItMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMy04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDgtOS8xMCwgDQotWzQ0NiwgNDQ5XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0NDksIDQ2MF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzQ2MCwgNDYxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ2MSwgNDYzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDYzLCA0NjRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNDY0LCA0NjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDY2LCA0ODZdIChzcGFuW2NsYXNzPWV4YW1wbGVdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogNS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDEwLTExLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMTEtMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTgtMTkvMjAsIA0KLVs0ODYsIDQ4OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDg5LCA1MDBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs1MDAsIDUwMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1MDEsIDUwM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzUwMywgNTA0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzUwNCwgNTA2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzUwNiwgNTUwXSAoc3BhbltoZWxsbz0iQ2xldmVsYW5kIl1bZ29vZGJ5ZT0iQ29sdW1idXMiXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDUtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDExLTIyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDIyLTIzLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMjMtMjQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDI0LTMxLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMzEtMzIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAzMi00MiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA0Mi00My80NCwgDQotWzU1MCwgNTUzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs1NTMsIDU2NF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzU2NCwgNTY1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzU2NSwgNTY3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTY3LCA1NjhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNTY4LCA1NzBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTcwLCA1OTBdIChhW3JlbH49ImNvcHlyaWdodCJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNS03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogNy0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxOC0xOS8yMCwgDQotWzU5MCwgNTkzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs1OTMsIDYwNF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzYwNCwgNjA2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjA2LCA2MDddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjA3LCA2MDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjA5LCA2MzhdIChhW2hyZWY9Imh0dHA6Ly93d3cudzMub3JnLyJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogNy0yNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyNy0yOC8yOSwgDQotWzYzOCwgNjQxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs2NDEsIDY1Ml0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzY1MiwgNjU0XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjU0LCA2NTVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjU1LCA2NTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjU3LCA2NjhdICgqW2xhbmc9ZnJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogNy05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDktMTAvMTEsIA0KLVs2NjgsIDY3MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNjcxLCA2ODVdIChkaXNwbGF5IDogbm9uZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTE0LCANCi1bNjg1LCA2ODddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2ODcsIDY4OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2ODgsIDY5MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2OTAsIDcwNF0gKCpbbGFuZ3w9ImVuIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA4LTEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDEyLTEzLzE0LCANCi1bNzA0LCA3MDddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzcwNywgNzE4XSAoY29sb3IgOiByZWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTEsIA0KLVs3MTgsIDcyMF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzcyMCwgNzIxXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzcyMSwgNzIzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzcyMywgNzUwXSAoRElBTE9HVUVbY2hhcmFjdGVyPXJvbWVvXQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDgtOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogOS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDE4LTE5LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMTktMjQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjQtMjUvMjcsIA0KLVs3NTAsIDc1M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNzUzLCA4MDBdICh2b2ljZS1mYW1pbHk6ICJMYXdyZW5jZSBPbGl2aWVyIiwgY2hhcmxlcywgbWFsZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMyLTMzLzM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzNC00MSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogNDEtNDIvNDMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQzLTQ3LCANCi1bODAwLCA4MDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs4MDIsIDgwM10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4MDMsIDgwNV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs4MDUsIDgzN10gKERJQUxPR1VFWyBjaGFyYWN0ZXIgPSBqdWxpZXQgXQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMTAtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDIyLTI4LzI5LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI5LTMwLzMyLCANCi1bODM3LCA4NDBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzg0MCwgODg2XSAodm9pY2UtZmFtaWx5OiAiVml2aWVuIExlaWdoIiwgdmljdG9yaWEsIGZlbWFsZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI4LTI5LzMwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMC0zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzgtMzkvNDAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQwLTQ2LCANCi1bODg2LCA4ODhdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs4ODgsIDg4OV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4ODksIDg5MV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs4OTEsIDkwMl0gKCoucGFzdG9yYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLzExLCANCi1bOTAyLCA5MDVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzkwNSwgOTE3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzkxNywgOTE5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTE5LCA5MjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTIwLCA5MjJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTIyLCA5MzJdICgucGFzdG9yYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTkvMTAsIA0KLVs5MzIsIDkzNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTM1LCA5NDddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTQ3LCA5NDldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5NDksIDk1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5NTAsIDk1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5NTIsIDk2NF0gKEgxLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMi0xMS8xMiwgDQotWzk2NCwgOTY3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5NjcsIDk3OV0gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5NzksIDk4MV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk4MSwgOTgyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzk4MiwgOTg0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk4NCwgMTAwMl0gKHAucGFzdG9yYWwubWFyaW5lICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMTAtMTcvMTgsIA0KLVsxMDAyLCAxMDA1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDA1LCAxMDE3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzEwMTcsIDEwMTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDE5LCAxMDIwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEwMjAsIDEwMjJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAyMiwgMTAzNF0gKGgxI2NoYXB0ZXIxICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9JRDogMi0xMS8xMiwgDQotWzEwMzQsIDEwMzddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEwMzcsIDEwNTVdICh0ZXh0LWFsaWduOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTItMTgsIA0KLVsxMDU1LCAxMDU3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTA1NywgMTA1OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDU4LCAxMDYwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwNjAsIDEwODBdIChkaXYgPiBwOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMy80LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNy0xOS8yMCwgDQotWzEwODAsIDEwODNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEwODMsIDEwOTddICh0ZXh0LWluZGVudDogMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTQsIA0KLVsxMDk3LCAxMDk5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTA5OSwgMTEwMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTAwLCAxMTAyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExMDIsIDExMTldIChwOmZpcnN0LWNoaWxkIGVtICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTMtMTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxNC0xNi8xNywgDQotWzExMTksIDExMjJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzExMjIsIDExNDBdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMTQwLCAxMTQyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0MiwgMTE0M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTQzLCAxMTQ1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNDUsIDExNjNdICgqID4gYTpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEvMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDUtMTcvMTgsIA0KLVsxMTYzLCAxMTY2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMTY2LCAxMTg0XSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTE4NCwgMTE4Nl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExODYsIDExODddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE4NywgMTE4OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTg5LCAxMjAzXSAoYTpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTIwMywgMTIwNl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTIwNiwgMTIyNF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzEyMjQsIDEyMjZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjI2LCAxMjI3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyMjcsIDEyMjldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTIyOSwgMTI0OF0gKGEuZXh0ZXJuYWw6dmlzaXRlZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxMC0xOC8xOSwgDQotWzEyNDgsIDEyNTFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyNTEsIDEyNjJdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVsxMjYyLCAxMjY0XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI2NCwgMTI2NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjY1LCAxMjY3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNjcsIDEyODFdIChhOmZvY3VzOmhvdmVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDctMTMvMTQsIA0KLVsxMjgxLCAxMjg0XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjg0LCAxMzAxXSAoYmFja2dyb3VuZDogd2hpdGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTItMTcsIA0KLVsxMzAxLCAxMzAzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMwMywgMTMwNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzA0LCAxMzA2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzMDYsIDEzMjBdIChodG1sOmxhbmcoZnIpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDQtMTMvMTQsIA0KLVsxMzIwLCAxMzIzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMzIzLCAxMzQwXSAocXVvdGVzOiAnPDwnICc+PicpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LCANCi1bMTM0MCwgMTM0Ml0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzNDIsIDEzNDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTM0MywgMTM0NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzQ1LCAxMzU5XSAoaHRtbDpsYW5nKGRlKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA0LTEzLzE0LCANCi1bMTM1OSwgMTM2Ml0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTM2MiwgMTM5NV0gKHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxOC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTMzLCANCi1bMTM5NSwgMTM5N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzOTcsIDEzOThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTM5OCwgMTQwMF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDAwLCAxNDE0XSAoOmxhbmcoZnIpID4gUSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xMy8xNCwgDQotWzE0MTQsIDE0MTddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE0MTcsIDE0MzRdIChxdW90ZXM6ICc8PCcgJz4+JykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcsIA0KLVsxNDM0LCAxNDM2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQzNiwgMTQzN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNDM3LCAxNDM5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MzksIDE0NTNdICg6bGFuZyhkZSkgPiBRICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTEzLzE0LCANCi1bMTQ1MywgMTQ1Nl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTQ1NiwgMTQ4OV0gKHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxOC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTMzLCANCi1bMTQ4OSwgMTQ5MV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0OTEsIDE0OTJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQ5MiwgMTQ5NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDk0LCAxNTA5XSAocDpmaXJzdC1sZXR0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xNC8xNSwgDQotWzE1MDksIDE1MTJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE1MTIsIDE1MjZdIChmb250LXNpemU6IDNlbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOS0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDExLTE0LCANCi1bMTUyNiwgMTUyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTI3LCAxNTI4XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNTI4LCAxNTQ3XSAoZm9udC13ZWlnaHQ6IG5vcm1hbCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzE1NDcsIDE1NDldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNTQ5LCAxNTUwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE1NTAsIDE1NTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU1MiwgMTU2OV0gKHAuc3BlY2lhbDpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA5LTE2LzE3LCANCi1bMTU2OSwgMTU3MV0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNTcxLCAxNTkxXSAoY29udGVudDogIlNwZWNpYWwhICIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDctOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOS0yMCwgDQotWzE1OTEsIDE1OTJdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE1OTIsIDE1OTNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU5MywgMTU5NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNTk1LCAxNjE4XSAocC5zcGVjaWFsOmZpcnN0LWxldHRlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDktMjIvMjMsIA0KLVsxNjE4LCAxNjIwXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE2MjAsIDE2MzRdIChjb2xvcjogI2ZmZDgwMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSEFTSDogNy0xNCwgDQotWzE2MzQsIDE2MzVdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE2MzUsIDE2MzZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTYzNiwgMTYzOF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNjM4LCAxNjQzXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzE2NDMsIDE2NDVdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTY0NSwgMTcwM10gKGZvbnQtZmFtaWx5OiBCYXNrZXJ2aWxsZSwgIkhlaXNpIE1pbmNobyBXMyIsIFN5bWJvbCwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI0LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtNDMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQzLTQ0LzQ1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0NS01MSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogNTEtNTIvNTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDUzLTU4LCANCi1bMTcwMywgMTcwNF0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTcwNCwgMTcwNV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzA1LCAxNzA3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE3MDcsIDE3MjFdICgqOmxhbmcoamEtanApICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMvMTQsIA0KLVsxNzIxLCAxNzIzXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE3MjMsIDE3NjhdIChmb250OiA5MDAgMTRwdC8xNnB0ICJIZWlzZWkgTWluY2hvIFc5Iiwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogNi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTAtMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE0LTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyMC0zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzgtMzkvNDAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQwLTQ1LCANCi1bMTc2OCwgMTc2OV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTc2OSwgMTc3MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzcwLCAxNzcyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE3NzIsIDE3ODZdICgqOmxhbmcoemgtdHcpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMvMTQsIA0KLVsxNzg2LCAxNzg4XSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE3ODgsIDE4MjZdIChmb250OiA4MDAgMTRwdC8xNi41cHQgIkxpIFN1bmciLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiA2LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMC0xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTQtMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNS0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDIyLTMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMS0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzMtMzgsIA0KLVsxODI2LCAxODI3XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxODI3LCAxODI4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE4MjgsIDE4MzBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3N2NiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLVswLCAxMl0gKGRlY2xhcmF0aW9uICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMTEvMTIsIA0KLVsxMiwgMTZdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bMTYsIDMzXSAoZGltZW5zaW9uIDogMTAwZXgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTcsIA0KLVszMywgMzRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMzQsIDM3XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVszNywgMTMzXSAoZnVuY3Rpb24gOiByZWN0KDEwMCwgMjAwLCAzMDAsIDQwMCksIGZvcm1hdCgiaW50ZWxsaWZvbnQiKSwgbG9jYWwoIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDExLTE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTYtMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE5LTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjEtMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI0LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjYtMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI5LTMwLzMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMzEtMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDM0LTM1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzNS0zNi8zNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMzctNDQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA0NC01NywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogNTctNTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDU4LTU5LzYwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiA2MC02NiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDY2LTk1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiA5NS05NiwgDQotWzEzMywgMTM0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEzNCwgMTM3XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxMzcsIDE1MV0gKGhhc2ggOiAjYWFiYmNjKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDctMTQsIA0KLVsxNTEsIDE1Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTIsIDE1NV0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTU1LCAxNjZdIChpZGVudCA6IGFueSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMSwgDQotWzE2NiwgMTY3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE2NywgMTcwXSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxNzAsIDE4NF0gKG51bWJlciA6IDk5OTk5KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDctOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogOS0xNCwgDQotWzE4NCwgMTg1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE4NSwgMTg4XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxODgsIDIwNV0gKHBlcmNlbnRhZ2UgOiAxMDAlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRTogMTMtMTcsIA0KLVsyMDUsIDIwNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyMDYsIDIwOV0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMjA5LCAyMjZdIChzdHJpbmcgOiAic3RyaW5nIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDktMTcsIA0KLVsyMjYsIDIyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyMjcsIDIzMF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMjMwLCAyNjhdICh1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDE2LTIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMzMtMzgsIA0KLVsyNjgsIDI2OV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyNjksIDI3MV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNzEsIDI3Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyNzIsIDI3NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDg3OWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA3MF0gKEBpbXBvcnQgdXJsKCIuLi9zYW1wbGUyLmNzcyIpIHByb2plY3Rpb24sIHR2KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTI5LzMwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMzAtNDAsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiA0MC00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDQyLTQ0LCANCi1bNzAsIDcxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzcxLCA3NV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs3NSwgODBdIChCT0RZICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCANCi1bODAsIDg3XSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzg3LCAxMDBdIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMTAwLCAxMDFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTAxLCAxMDddICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEwNywgMTI2XSAodGV4dC1hbGlnbiA6IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzEyNiwgMTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyNywgMTMzXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxMzMsIDE3Ml0gKGJhY2tncm91bmQtY29sb3IgOiByZ2IoIDE4MSwgMjUzLCAyMTEgKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAxOS0yMy8yNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI0LTI3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNy0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI5LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDM0LTM3LzM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzOC0zOSwgDQotWzE3MiwgMTc0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE3NCwgMTc1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NSwgMTc5XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE3OSwgMTgyXSAoVUwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVsxODIsIDE4OV0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVsxODksIDIwMl0gKGNvbG9yIDogYmxhY2spDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTMsIA0KLVsyMDIsIDIwM10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyMDMsIDIwOV0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMjA5LCAyNTFdIChsaXN0LXN0eWxlLWltYWdlIDogdXJsKCJpbWFnZXMvbF9hMDEuZ2lmIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VUkk6IDE5LTQyLCANCi1bMjUxLCAyNTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjUyLCAyNThdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzI1OCwgMjg3XSAobGlzdC1zdHlsZS1wb3NpdGlvbiA6IG91dHNpZGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjItMjksIA0KLVsyODcsIDI4OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyODksIDI5MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyOTAsIDI5NF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyOTQsIDI5N10gKEgxICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMjk3LCAzMDRdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMzA0LCAzMTddIChjb2xvciA6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMzE3LCAzMThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMzE4LCAzMjRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzMyNCwgMzQzXSAodGV4dC1hbGlnbiA6IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzM0MywgMzQ0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM0NCwgMzUwXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszNTAsIDM3N10gKGJvcmRlci1sZWZ0LWNvbG9yIDogIzk5NjY2NikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE4LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDIwLTI3LCANCi1bMzc3LCAzNzhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMzc4LCAzODRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzM4NCwgNDAxXSAocGFkZGluZy10b3AgOiAwcHgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE0LTE3LCANCi1bNDAxLCA0MDJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDAyLCA0MDhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQwOCwgNDI3XSAocGFkZGluZy1yaWdodCA6IDFjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTYtMTksIA0KLVs0MjcsIDQyOF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0MjgsIDQzNF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNDM0LCA0NTJdIChwYWRkaW5nLWJvdHRvbSA6IDIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNS0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE3LTE4LCANCi1bNDUyLCA0NTNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDUzLCA0NTldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQ1OSwgNDc3XSAocGFkZGluZy1sZWZ0IDogM2VtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNS0xOCwgDQotWzQ3NywgNDc4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ3OCwgNDg0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0ODQsIDUwNF0gKGJvcmRlci1zdHlsZSA6IHNvbGlkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTIwLCANCi1bNTA0LCA1MDVdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTA1LCA1MTFdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzUxMSwgNTM1XSAoYm9yZGVyLXRvcC13aWR0aCA6IDQuNWV4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxOS0yNCwgDQotWzUzNSwgNTM2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUzNiwgNTQyXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs1NDIsIDU2Nl0gKGJvcmRlci1yaWdodC13aWR0aCA6IDVpbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE5LTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMjEtMjQsIA0KLVs1NjYsIDU2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1NjcsIDU3M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNTczLCA2MDFdIChib3JkZXItYm90dG9tLXdpZHRoIDogNi4wMm1tKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAyMi0yOCwgDQotWzYwMSwgNjAyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzYwMiwgNjA4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs2MDgsIDYyOV0gKGJvcmRlci1sZWZ0LXdpZHRoIDogNykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE4LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjAtMjEsIA0KLVs2MjksIDYzMV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MzEsIDYzMl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2MzIsIDYzNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs2MzYsIDY0Nl0gKEgxOmJlZm9yZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAyLTkvMTAsIA0KLVs2NDYsIDY1M10gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs2NTMsIDY5N10gKGNvbnRlbnQgOiAiQ2hhcHRlciAiIGNvdW50ZXIoIGNoYXB0ZXIgKSAiLiAiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEwLTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAyMS0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzAtMzcvMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogNDAtNDQsIA0KLVs2OTcsIDY5OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs2OTgsIDcwNF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNzA0LCA3MzFdIChjb3VudGVyLWluY3JlbWVudCA6IGNoYXB0ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjAtMjcsIA0KLVs3MzEsIDczMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs3MzIsIDczOF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNzM4LCA3NjFdIChjb3VudGVyLXJlc2V0IDogc2VjdGlvbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNi0yMywgDQotWzc2MSwgNzYzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzc2MywgNzY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzc2NCwgNzY4XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzc2OCwgNzc5XSAoSU1HOmJlZm9yZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAzLTEwLzExLCANCi1bNzc5LCA3ODBdICh7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLCANCi1bNzgwLCA3OTldIChjb250ZW50IDogYXR0cihhbHQpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTAtMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAxOC0xOSwgDQotWzc5OSwgODAwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzgwMCwgODA0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzgwNCwgODE1XSAoRElWLnNhbXBsZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDMtMTAvMTEsIA0KLVs4MTUsIDgyMl0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs4MjIsIDg2M10gKGZvbnQtZmFtaWx5IDogIlJvYnNvbiBDZWx0aWMiLCBzYW5zLXNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0yOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjktMzAvMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMxLTQxLCANCi1bODYzLCA4NjRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bODY0LCA4NzBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzg3MCwgODg5XSAocG9zaXRpb24gOiBhYnNvbHV0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMS0xOSwgDQotWzg4OSwgODkwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzg5MCwgODk2XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs4OTYsIDkxMF0gKGxlZnQgOiA4MzMuNXBjKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogNy0xNCwgDQotWzkxMCwgOTExXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzkxMSwgOTE3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs5MTcsIDkyNl0gKHRvcCA6IDkwJSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFOiA2LTksIA0KLVs5MjYsIDkyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MjcsIDkzM10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTMzLCA5NDZdICh3aWR0aCA6IDEwMHB0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xMywgDQotWzk0NiwgOTQ3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzk0NywgOTUzXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs5NTMsIDk3MV0gKGhlaWdodCA6IDExMC43NzdweCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDktMTgsIA0KLVs5NzEsIDk3Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5NzIsIDk3OF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTc4LCAxMDE1XSAoY2xpcCA6IHJlY3QoIC01cHgsIDgwcHgsIDEzMHB4LCAwcHggKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNy0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEzLTE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE5LTIzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMy0yNC8yNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDI1LTMwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMC0zMS8zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDMyLTM1LzM2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzNi0zNywgDQotWzEwMTUsIDEwMTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAxNywgMTAxOF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDE4LCAxMDIyXSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzEwMjIsIDEwMzNdIChAZm9udC1mYWNlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBGT05UX0ZBQ0U6IDAtMTAvMTEsIA0KLVsxMDMzLCAxMDQwXSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzEwNDAsIDEwNjVdIChmb250LWZhbWlseSA6ICJTd2lzcyA3MjEiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0yNSwgDQotWzEwNjUsIDEwNjZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTA2NiwgMTA3Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTA3MiwgMTE1OF0gKHNyYyA6IHVybCgic3dpc3M3MjF0LnBmciIpIGZvcm1hdCgiaW50ZWxsaWZvbnQiKSwgbG9jYWwoIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VSSTogNi0yNi8yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMjctMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAzNC00NywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogNDctNDgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQ4LTQ5LzUwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiA1MC01NiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDU2LTg1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiA4NS04NiwgDQotWzExNTgsIDExNTldICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTE1OSwgMTE2NV0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTE2NSwgMTIwM10gKHVuaWNvZGUtcmFuZ2UgOiBVKz8/LCBVKzEwMC0yMjAsIFUrND8/KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTQtMTUvMTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMTYtMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDIyLTMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMS0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAzMy0zOCwgDQotWzEyMDMsIDEyMDRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTIwNCwgMTIxMF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTIxMCwgMTI0N10gKGZvbnQtd2VpZ2h0IDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE0LTE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE5LTIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMi0yMy8yNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI0LTI3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNy0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI5LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDM0LTM3LCANCi1bMTI0NywgMTI0OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjQ5LCAxMjUwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyNTAsIDEyNTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTI1NCwgMTI2Nl0gKEBwYWdlIDpsZWZ0ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBQQUdFOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfUEFHRV9TRUxFQ1RPUjogNi0xMS8xMiwgDQotWzEyNjYsIDEyNjddICh7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLCANCi1bMTI2NywgMTI4NF0gKG1hcmdpbi1sZWZ0IDogNGNtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzEyODQsIDEyODVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTI4NSwgMTI4OV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxMjg5LCAxMzAyXSAoQG1lZGlhIGF1cmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBNRURJQTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA3LTEyLzEzLCANCi1bMTMwMiwgMTMwOV0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVsxMzA5LCAxMzMyXSAoSDEsIEgyLCBIMywgSDQsIEg1LCBINiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogOC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDE2LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMTgtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAyMC0yMi8yMywgDQotWzEzMzIsIDEzNDNdICh7DQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMTEsIA0KLVsxMzQzLCAxMzY5XSAodm9pY2UtZmFtaWx5IDogcGF1bCwgY2hpbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMy0xNC8xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTUtMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE5LTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyMS0yNiwgDQotWzEzNjksIDEzNzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTM3MCwgMTM4MF0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxMzgwLCAxMzkxXSAoc3RyZXNzIDogMjApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiA5LTExLCANCi1bMTM5MSwgMTM5Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzkyLCAxNDAyXSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE0MDIsIDE0MTVdIChyaWNobmVzcyA6IDkwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMS0xMywgDQotWzE0MTUsIDE0MTZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTQxNiwgMTQyNl0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNDI2LCAxNDUzXSAoY3VlLWJlZm9yZSA6IHVybCgicGluZy5hdSIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxMy0yNywgDQotWzE0NTMsIDE0NTldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE0NTksIDE0NjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQ2MCwgMTQ2Nl0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTQ2NiwgMTQ3NF0gKFAuaGVpZGkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzE0NzQsIDE0ODVdICh7DQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMTEsIA0KLVsxNDg1LCAxNTA2XSAoYXppbXV0aCA6IGNlbnRlci1sZWZ0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMjEsIA0KLVsxNTA2LCAxNTA3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE1MDcsIDE1MTddICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTUxNywgMTUzNl0gKGVsZXZhdGlvbiA6IDEyLjNkZWcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTksIA0KLVsxNTM2LCAxNTM3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE1MzcsIDE1NDddICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTU0NywgMTU2NF0gKHBhdXNlIDogMzBtcyAxLjZzKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEzLTE3LCANCi1bMTU2NCwgMTU3MF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTU3MCwgMTU3MV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTcxLCAxNTc3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxNTc3LCAxNTg1XSAoUC5wZXRlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNy84LCANCi1bMTU4NSwgMTU5Nl0gKHsNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8xMSwgDQotWzE1OTYsIDE2MTFdIChhemltdXRoIDogcmlnaHQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMC0xNSwgDQotWzE2MTEsIDE2MTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTYxMiwgMTYyMl0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNjIyLCAxNjQyXSAoZWxldmF0aW9uIDogLTAuMzZyYWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMjAsIA0KLVsxNjQyLCAxNjQzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE2NDMsIDE2NTNdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTY1MywgMTY2Nl0gKHBpdGNoIDogMjEwSHopDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA4LTEzLCANCi1bMTY2NiwgMTY3Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTY3MiwgMTY3M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNjczLCAxNjc5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxNjc5LCAxNjg2XSAoUC5nb2F0ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS02LzcsIA0KLVsxNjg2LCAxNjk3XSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTY5NywgMTcxMl0gKHZvbHVtZSA6IHgtc29mdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOS0xNSwgDQotWzE3MTIsIDE3MTNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTcxMywgMTcyM10gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNzIzLCAxNzQxXSAoZWxldmF0aW9uIDogNjZncmFkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE4LCANCi1bMTc0MSwgMTc0Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNzQyLCAxNzUyXSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE3NTIsIDE3NjddIChwaXRjaCA6IDAuMTdrSHopDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA4LTE1LCANCi1bMTc2NywgMTc3M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTc3MywgMTc3NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzc0LCAxNzc2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE3NzYsIDE3NzddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3NywgMTc4MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDguY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWRjOWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDguY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotWzAsIDE4XSAoYS5uZXdXaW5kb3cgLyogKi8gKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMTItMTcsIENvbnRleHRSZWdpb24tLT4gUzogMTctMTgsIAotWzE4LCAyNV0gKHsKLSAgICApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCAKLVsyNSwgNzddIChiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL3Rlc3QucG5nKSAhaW1wb3J0YW50KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNi0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VUkk6IDE4LTQxLzQyLCBDb250ZXh0UmVnaW9uLS0+IENTU19ERUNMQVJBVElPTl9WQUxVRV9JTVBPUlRBTlQ6IDQyLTUyLCAKLVs3NywgNzhdICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzc4LCA4MF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs4MCwgODFdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzgxLCA4M10gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDNhNDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMCwgMg0KLVsgXSBTIC0gMiwgMQ0KLVt7XSBMQlJBQ0UgLSAzLCAxDQotWw0KLQ0KLQldIFMgLSA0LCA1DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQsIDENCi1bIF0gUyAtIDE1LCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2LCA1DQotWw0KLQldIFMgLSAyMSwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNCwgMQ0KLVsNCi0NCi0JXSBTIC0gMjUsIDUNCi1bYmFja2dyb3VuZC1jb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMCwgMTYNCi1bIF0gUyAtIDQ2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ3LCAxDQotWyBdIFMgLSA0OCwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OSwgNQ0KLVsNCi0JDQotXSBTIC0gNTQsIDUNCi1bfV0gUkJSQUNFIC0gNTksIDENCi1bDQotXSBTIC0gNjAsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGY2MDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLVtAaW1wb3J0XSBJTVBPUlQgLSAwLCA3DQotWyBdIFMgLSA3LCAxDQotW3VybCgiaG9nZS5jc3MiKV0gVVJJIC0gOCwgMTUNCi1bO10gREVMSU1JVEVSIC0gMjMsIDENCi1bDQotXSBTIC0gMjQsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSAzNCwgMTMNCi1bIF0gUyAtIDQ3LCAxDQotW3VybChob2dlLmNzcyldIFVSSSAtIDQ4LCAxMw0KLVs7XSBERUxJTUlURVIgLSA2MSwgMQ0KLVsNCi1dIFMgLSA2MiwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA2NCwgNw0KLVsgXSBTIC0gNzEsIDENCi1bImhvZ2UuY3NzIl0gU1RSSU5HIC0gNzIsIDEwDQotWyBdIFMgLSA4MiwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gODMsIDEzDQotWztdIERFTElNSVRFUiAtIDk2LCAxDQotWw0KLV0gUyAtIDk3LCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDk5LCA3DQotWyBdIFMgLSAxMDYsIDENCi1bJ2hvZ2UuY3NzJ10gU1RSSU5HIC0gMTA3LCAxMA0KLVsgXSBTIC0gMTE3LCAxDQotWyxdIHVuZGVmaW5lZCAtIDExOCwgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDExOSwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxMjUsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxMjYsIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTMyLCAxDQotWyxdIHVuZGVmaW5lZCAtIDEzMywgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDEzNCwgNg0KLVsgXSBTIC0gMTQwLCAxDQotW21dIHVuZGVmaW5lZCAtIDE0MSwgMQ0KLVtlXSB1bmRlZmluZWQgLSAxNDIsIDENCi1bZF0gdW5kZWZpbmVkIC0gMTQzLCAxDQotW2ldIHVuZGVmaW5lZCAtIDE0NCwgMQ0KLVthXSB1bmRlZmluZWQgLSAxNDUsIDENCi1bNF0gdW5kZWZpbmVkIC0gMTQ2LCAxDQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE0NywgMQ0KLVttZWRpYTVdIE1FRElVTSAtIDE0OCwgNg0KLVsgXSBTIC0gMTU0LCAxDQotW0BpbXBvcnRdIElNUE9SVCAtIDE1NSwgNw0KLVsgXSBTIC0gMTYyLCAxDQotW21dIHVuZGVmaW5lZCAtIDE2MywgMQ0KLVtlXSB1bmRlZmluZWQgLSAxNjQsIDENCi1bZF0gdW5kZWZpbmVkIC0gMTY1LCAxDQotW2ldIHVuZGVmaW5lZCAtIDE2NiwgMQ0KLVthXSB1bmRlZmluZWQgLSAxNjcsIDENCi1bNl0gdW5kZWZpbmVkIC0gMTY4LCAxDQotWztdIERFTElNSVRFUiAtIDE2OSwgMQ0KLVsNCi0NCi1dIFMgLSAxNzAsIDQNCi1bPCEtLV0gQ0RPIC0gMTc0LCA0DQotWyBdIFMgLSAxNzgsIDENCi1bLyogaG9nZWhvZ2UgKi9dIENPTU1FTlQgLSAxNzksIDE0DQotWw0KLQ0KLV0gUyAtIDE5MywgNA0KLVstLT5dIENEQyAtIDE5NywgMw0KLVsNCi0NCi1dIFMgLSAyMDAsIDQNCi1bLyogY29tbWVudCAyICovXSBDT01NRU5UIC0gMjA0LCAxNQ0KLVsNCi1dIFMgLSAyMTksIDINCi1ba3Vzb10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjIxLCA0DQotWw0KLV0gUyAtIDIyNSwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhM2UxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLVtAaW1wb3J0XSBJTVBPUlQgLSAwLCA3DQotWyBdIFMgLSA3LCAxDQotW3VybCgiLi4vc2FtcGxlMi5jc3MiKV0gVVJJIC0gOCwgMjENCi1bO10gREVMSU1JVEVSIC0gMjksIDENCi1bDQotDQotXSBTIC0gMzAsIDQNCi1bLyogU2FtcGxlIFN0eWxlcyAqL10gQ09NTUVOVCAtIDM0LCAxOQ0KLVsNCi0NCi1dIFMgLSA1MywgNA0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1NywgNA0KLVsgXSBTIC0gNjEsIDENCi1be10gTEJSQUNFIC0gNjIsIDENCi1bDQotCV0gUyAtIDYzLCAzDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY2LCA1DQotWyBdIFMgLSA3MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MiwgMQ0KLVsgXSBTIC0gNzMsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzQsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNzksIDENCi1bDQotCV0gUyAtIDgwLCAzDQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODMsIDE2DQotWyBdIFMgLSA5OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDAsIDENCi1bIF0gUyAtIDEwMSwgMQ0KLVtyZ2IoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDEwMiwgNA0KLVsxODFdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwNiwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwOSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTEwLCAxDQotWzI1M10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTExLCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTE0LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTUsIDENCi1bMjExXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMTYsIDMNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxMTksIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTIwLCAxDQotWw0KLQldIFMgLSAxMjEsIDMNCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjQsIDEwDQotWyBdIFMgLSAxMzQsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM1LCAxDQotWyBdIFMgLSAxMzYsIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEzNywgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNDMsIDENCi1bDQotCV0gUyAtIDE0NCwgMw0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDcsIDExDQotWyBdIFMgLSAxNTgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU5LCAxDQotWyBdIFMgLSAxNjAsIDENCi1bIkhlaXNlaSBNaW5jaG8gVzMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNjEsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgxLCA1DQotWw0KLV0gUyAtIDE4NiwgMg0KLVt9XSBSQlJBQ0UgLSAxODgsIDENCi1bDQotDQotXSBTIC0gMTg5LCA0DQotW0BwYWdlXSBQQUdFIC0gMTkzLCA1DQotWyBdIFMgLSAxOTgsIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMTk5LCA1DQotWyBdIFMgLSAyMDQsIDENCi1be10gTEJSQUNFIC0gMjA1LCAxDQotWyBdIFMgLSAyMDYsIDENCi1bbWFyZ2luLWxlZnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjA3LCAxMQ0KLVsgXSBTIC0gMjE4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDIxOSwgMQ0KLVsgXSBTIC0gMjIwLCAxDQotWzRjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjIxLCAzDQotWyBdIFMgLSAyMjQsIDENCi1bfV0gUkJSQUNFIC0gMjI1LCAxDQotWw0KLQ0KLV0gUyAtIDIyNiwgNA0KLVtAbWVkaWFdIE1FRElBIC0gMjMwLCA2DQotWyBdIFMgLSAyMzYsIDENCi1bYXVyYWxdIE1FRElVTSAtIDIzNywgNQ0KLVsgXSBTIC0gMjQyLCAxDQotW3tdIExCUkFDRSAtIDI0MywgMQ0KLVsNCi0JXSBTIC0gMjQ0LCAzDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI0NywgMQ0KLVsuaGVpZGldIFNFTEVDVE9SX0NMQVNTIC0gMjQ4LCA2DQotWyBdIFMgLSAyNTQsIDENCi1be10gTEJSQUNFIC0gMjU1LCAxDQotWw0KLQkJXSBTIC0gMjU2LCA0DQotW2F6aW11dGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjYwLCA3DQotWyBdIFMgLSAyNjcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjY4LCAxDQotWyBdIFMgLSAyNjksIDENCi1bY2VudGVyLWxlZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjcwLCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyODEsIDENCi1bDQotCQldIFMgLSAyODIsIDQNCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI4NiwgOQ0KLVsgXSBTIC0gMjk1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI5NiwgMQ0KLVsgXSBTIC0gMjk3LCAxDQotWzEyLjNkZWddIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDI5OCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAzMDUsIDENCi1bDQotCQldIFMgLSAzMDYsIDQNCi1bcGF1c2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzEwLCA1DQotWyBdIFMgLSAzMTUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzE2LCAxDQotWyBdIFMgLSAzMTcsIDENCi1bMzBtc10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzE4LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAzMjIsIDENCi1bMS42c10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzIzLCA0DQotWw0KLQldIFMgLSAzMjcsIDMNCi1bfV0gUkJSQUNFIC0gMzMwLCAxDQotWw0KLV0gUyAtIDMzMSwgMg0KLVt9XSBSQlJBQ0UgLSAzMzMsIDENCi1bDQotXSBTIC0gMzM0LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ1ZDJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotW0BjaGFyc2V0XSBDSEFSU0VUIC0gMCwgOA0KLVsgXSBTIC0gOCwgMQ0KLVsiSVNPLTg4NTktMSJdIFNUUklORyAtIDksIDEyDQotWztdIERFTElNSVRFUiAtIDIxLCAxDQotWw0KLQ0KLV0gUyAtIDIyLCA0DQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDM0LCAxNQ0KLVs7XSBERUxJTUlURVIgLSA0OSwgMQ0KLVsNCi1dIFMgLSA1MCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA1MiwgNw0KLVsgXSBTIC0gNTksIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDYwLCAxMw0KLVsgXSBTIC0gNzMsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNzQsIDEzDQotWztdIERFTElNSVRFUiAtIDg3LCAxDQotWw0KLV0gUyAtIDg4LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDkwLCA3DQotWyBdIFMgLSA5NywgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA5OCwgMTANCi1bIF0gUyAtIDEwOCwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMTA5LCAxMw0KLVs7XSBERUxJTUlURVIgLSAxMjIsIDENCi1bDQotXSBTIC0gMTIzLCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDEyNSwgNw0KLVsgXSBTIC0gMTMyLCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEzMywgMTANCi1bIF0gUyAtIDE0MywgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDE0NCwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTAsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxNTEsIDYNCi1bIF0gUyAtIDE1NywgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTgsIDENCi1bIF0gUyAtIDE1OSwgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDE2MCwgNg0KLVs7XSBERUxJTUlURVIgLSAxNjYsIDENCi1bDQotDQotXSBTIC0gMTY3LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxNzEsIDYNCi1bIF0gUyAtIDE3NywgMQ0KLVtwcmludF0gTUVESVVNIC0gMTc4LCA1DQotWyBdIFMgLSAxODMsIDENCi1be10gTEJSQUNFIC0gMTg0LCAxDQotWw0KLQ0KLV0gUyAtIDE4NSwgNA0KLVt9XSBSQlJBQ0UgLSAxODksIDENCi1bDQotDQotXSBTIC0gMTkwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTk0LCA1DQotWyBdIFMgLSAxOTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMjAwLCA1DQotWyBdIFMgLSAyMDUsIDENCi1be10gTEJSQUNFIC0gMjA2LCAxDQotWw0KLQ0KLV0gUyAtIDIwNywgNA0KLVt9XSBSQlJBQ0UgLSAyMTEsIDENCi1bDQotDQotXSBTIC0gMjEyLCA0DQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMTYsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjE4LCAxDQotWyBdIFMgLSAyMTksIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMCwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMjIsIDENCi1bIF0gUyAtIDIyMywgMQ0KLVtoM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjI0LCAyDQotWyBdIFMgLSAyMjYsIDENCi1be10gTEJSQUNFIC0gMjI3LCAxDQotWyAgXSBTIC0gMjI4LCAyDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIzMCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQxLCAxDQotWyBdIFMgLSAyNDIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNDMsIDEwDQotWyAgXSBTIC0gMjUzLCAyDQotW31dIFJCUkFDRSAtIDI1NSwgMQ0KLVsNCi1dIFMgLSAyNTYsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI1OCwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjYwLCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNjEsIDINCi1bIF0gUyAtIDI2MywgMQ0KLVt7XSBMQlJBQ0UgLSAyNjQsIDENCi1bICBdIFMgLSAyNjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI3MiwgMQ0KLVsgXSBTIC0gMjczLCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjc0LCA0DQotWyAgXSBTIC0gMjc4LCAyDQotW31dIFJCUkFDRSAtIDI4MCwgMQ0KLVsNCi1dIFMgLSAyODEsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODMsIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4NiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODcsIDENCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4OCwgMQ0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAyODksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gMjkwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gMjkxLCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSAyOTUsIDENCi1bIF0gUyAtIDI5NiwgMQ0KLVt7XSBMQlJBQ0UgLSAyOTcsIDENCi1bICBdIFMgLSAyOTgsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMwNSwgMQ0KLVsgXSBTIC0gMzA2LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzA3LCA0DQotWyAgXSBTIC0gMzExLCAyDQotW31dIFJCUkFDRSAtIDMxMywgMQ0KLVsNCi1dIFMgLSAzMTQsIDINCi1bYm9keV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzE2LCA0DQotWyBdIFMgLSAzMjAsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDMyMSwgMQ0KLVsgXSBTIC0gMzIyLCAxDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMyMywgMQ0KLVsgXSBTIC0gMzI0LCAxDQotW3tdIExCUkFDRSAtIDMyNSwgMQ0KLVsgIF0gUyAtIDMyNiwgMg0KLVtsaW5lLWhlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzOSwgMQ0KLVsgXSBTIC0gMzQwLCAxDQotWzEuM10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzQxLCAzDQotWyAgXSBTIC0gMzQ0LCAyDQotW31dIFJCUkFDRSAtIDM0NiwgMQ0KLVsNCi1dIFMgLSAzNDcsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNDksIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1MiwgMQ0KLVtvbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzUzLCAyDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTUsIDENCi1bbGldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1NiwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU4LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1OSwgMQ0KLVsgXSBTIC0gMzYwLCAxDQotW3tdIExCUkFDRSAtIDM2MSwgMQ0KLVsgXSBTIC0gMzYyLCAxDQotW31dIFJCUkFDRSAtIDM2MywgMQ0KLVsNCi1dIFMgLSAzNjQsIDINCi1bbWF0aF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzY2LCA0DQotWyBdIFMgLSAzNzAsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM3MSwgMQ0KLVsgXSBTIC0gMzcyLCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM3MywgMQ0KLVsgXSBTIC0gMzc0LCAxDQotW3tdIExCUkFDRSAtIDM3NSwgMQ0KLVsgIF0gUyAtIDM3NiwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNzgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM4OSwgMQ0KLVsgXSBTIC0gMzkwLCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM5MSwgMQ0KLVsgIF0gUyAtIDM5MiwgMg0KLVt9XSBSQlJBQ0UgLSAzOTQsIDENCi1bDQotXSBTIC0gMzk1LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzOTcsIDINCi1bLm9wZW5lcl0gU0VMRUNUT1JfQ0xBU1MgLSAzOTksIDcNCi1bIF0gUyAtIDQwNiwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gNDA3LCAxDQotWyBdIFMgLSA0MDgsIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQwOSwgMg0KLVsgXSBTIC0gNDExLCAxDQotW3tdIExCUkFDRSAtIDQxMiwgMQ0KLVsgIF0gUyAtIDQxMywgMg0KLVttYXJnaW4tdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQxNSwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDI1LCAxDQotWyBdIFMgLSA0MjYsIDENCi1bLTVtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI3LCA0DQotWyAgXSBTIC0gNDMxLCAyDQotW31dIFJCUkFDRSAtIDQzMywgMQ0KLVsNCi1dIFMgLSA0MzQsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQzNiwgMg0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0MzgsIDENCi1bdGl0bGVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDM5LCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0NDQsIDENCi1bIF0gUyAtIDQ0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0NDYsIDENCi1bICBdIFMgLSA0NDcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDQ5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ1NCwgMQ0KLVsgXSBTIC0gNDU1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDU2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ2MCwgMQ0KLVsgIF0gUyAtIDQ2MSwgMg0KLVt9XSBSQlJBQ0UgLSA0NjMsIDENCi1bDQotXSBTIC0gNDY0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQ2NiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0NzAsIDENCi1bY2xhc3NdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDcxLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDQ3NiwgMQ0KLVtleGFtcGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA0NzcsIDcNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ4NCwgMQ0KLVsgXSBTIC0gNDg1LCAxDQotW3tdIExCUkFDRSAtIDQ4NiwgMQ0KLVsgIF0gUyAtIDQ4NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0ODksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDk0LCAxDQotWyBdIFMgLSA0OTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTAwLCAxDQotWyAgXSBTIC0gNTAxLCAyDQotW31dIFJCUkFDRSAtIDUwMywgMQ0KLVsNCi1dIFMgLSA1MDQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTA2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUxMCwgMQ0KLVtoZWxsb10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MTEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTE2LCAxDQotWyJDbGV2ZWxhbmQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MTcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1MjgsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTI5LCAxDQotW2dvb2RieWVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTMwLCA3DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUzNywgMQ0KLVsiQ29sdW1idXMiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MzgsIDEwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1NDgsIDENCi1bIF0gUyAtIDU0OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1NTAsIDENCi1bICBdIFMgLSA1NTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTUzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU1OCwgMQ0KLVsgXSBTIC0gNTU5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNTYwLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NCwgMQ0KLVsgIF0gUyAtIDU2NSwgMg0KLVt9XSBSQlJBQ0UgLSA1NjcsIDENCi1bDQotXSBTIC0gNTY4LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDU3MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1NzEsIDENCi1bcmVsXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDU3MiwgMw0KLVt+PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTc1LCAyDQotWyJjb3B5cmlnaHQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1NzcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1ODgsIDENCi1bIF0gUyAtIDU4OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1OTAsIDENCi1bICBdIFMgLSA1OTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTkzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5OCwgMQ0KLVsgXSBTIC0gNTk5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjAwLCA0DQotWyAgXSBTIC0gNjA0LCAyDQotW31dIFJCUkFDRSAtIDYwNiwgMQ0KLVsNCi1dIFMgLSA2MDcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjA5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDYxMCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDYxMSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2MTUsIDENCi1bImh0dHA6Ly93d3cudzMub3JnLyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDYxNiwgMjANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDYzNiwgMQ0KLVsgXSBTIC0gNjM3LCAxDQotW3tdIExCUkFDRSAtIDYzOCwgMQ0KLVsgIF0gUyAtIDYzOSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NDEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjQ2LCAxDQotWyBdIFMgLSA2NDcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2NDgsIDQNCi1bICBdIFMgLSA2NTIsIDINCi1bfV0gUkJSQUNFIC0gNjU0LCAxDQotWw0KLV0gUyAtIDY1NSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2NTcsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjU4LCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjU5LCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY2MywgMQ0KLVtmcl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjY0LCAyDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2NjYsIDENCi1bIF0gUyAtIDY2NywgMQ0KLVt7XSBMQlJBQ0UgLSA2NjgsIDENCi1bICBdIFMgLSA2NjksIDINCi1bZGlzcGxheV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NzEsIDcNCi1bIF0gUyAtIDY3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NzksIDENCi1bIF0gUyAtIDY4MCwgMQ0KLVtub25lXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MSwgNA0KLVsgIF0gUyAtIDY4NSwgMg0KLVt9XSBSQlJBQ0UgLSA2ODcsIDENCi1bDQotXSBTIC0gNjg4LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY5MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2OTEsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2OTIsIDQNCi1bfD1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY5NiwgMg0KLVsiZW4iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2OTgsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDcwMiwgMQ0KLVsgXSBTIC0gNzAzLCAxDQotW3tdIExCUkFDRSAtIDcwNCwgMQ0KLVsgIF0gUyAtIDcwNSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3MDcsIDUNCi1bIF0gUyAtIDcxMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MTMsIDENCi1bIF0gUyAtIDcxNCwgMQ0KLVtyZWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzE1LCAzDQotWyAgXSBTIC0gNzE4LCAyDQotW31dIFJCUkFDRSAtIDcyMCwgMQ0KLVsNCi1dIFMgLSA3MjEsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDcyMywgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA3MzEsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDczMiwgOQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA3NDEsIDENCi1bcm9tZW9dIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDc0MiwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzQ3LCAxDQotWw0KLV0gUyAtIDc0OCwgMg0KLVt7XSBMQlJBQ0UgLSA3NTAsIDENCi1bICBdIFMgLSA3NTEsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc1MywgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzY1LCAxDQotWyBdIFMgLSA3NjYsIDENCi1bIkxhd3JlbmNlIE9saXZpZXIiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA3NjcsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3ODYsIDENCi1bY2hhcmxlc10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3ODcsIDcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3OTQsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc5NSwgMQ0KLVttYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NiwgNA0KLVsgIF0gUyAtIDgwMCwgMg0KLVt9XSBSQlJBQ0UgLSA4MDIsIDENCi1bDQotXSBTIC0gODAzLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDUsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gODEzLCAxDQotWyBdIFMgLSA4MTQsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDgxNSwgOQ0KLVsgXSBTIC0gODI0LCAxDQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDgyNSwgMQ0KLVsgXSBTIC0gODI2LCAxDQotW2p1bGlldF0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gODI3LCA2DQotWyBdIFMgLSA4MzMsIDENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDgzNCwgMQ0KLVsNCi1dIFMgLSA4MzUsIDINCi1be10gTEJSQUNFIC0gODM3LCAxDQotWyAgXSBTIC0gODM4LCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NDAsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg1MiwgMQ0KLVsgXSBTIC0gODUzLCAxDQotWyJWaXZpZW4gTGVpZ2giXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4NTQsIDE0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODY4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NjksIDENCi1bdmljdG9yaWFdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODcwLCA4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODc4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NzksIDENCi1bZmVtYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MCwgNg0KLVsgIF0gUyAtIDg4NiwgMg0KLVt9XSBSQlJBQ0UgLSA4ODgsIDENCi1bDQotXSBTIC0gODg5LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDg5MSwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gODkyLCA5DQotWyBdIFMgLSA5MDEsIDENCi1be10gTEJSQUNFIC0gOTAyLCAxDQotWyAgXSBTIC0gOTAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MTAsIDENCi1bIF0gUyAtIDkxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5MTIsIDUNCi1bICBdIFMgLSA5MTcsIDINCi1bfV0gUkJSQUNFIC0gOTE5LCAxDQotWw0KLV0gUyAtIDkyMCwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTIyLCA5DQotWyBdIFMgLSA5MzEsIDENCi1be10gTEJSQUNFIC0gOTMyLCAxDQotWyAgXSBTIC0gOTMzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NDAsIDENCi1bIF0gUyAtIDk0MSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NDIsIDUNCi1bICBdIFMgLSA5NDcsIDINCi1bfV0gUkJSQUNFIC0gOTQ5LCAxDQotWw0KLV0gUyAtIDk1MCwgMg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTUyLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5NTQsIDkNCi1bIF0gUyAtIDk2MywgMQ0KLVt7XSBMQlJBQ0UgLSA5NjQsIDENCi1bICBdIFMgLSA5NjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk3MiwgMQ0KLVsgXSBTIC0gOTczLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk3NCwgNQ0KLVsgIF0gUyAtIDk3OSwgMg0KLVt9XSBSQlJBQ0UgLSA5ODEsIDENCi1bDQotXSBTIC0gOTgyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk4NCwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTg1LCA5DQotWy5tYXJpbmVdIFNFTEVDVE9SX0NMQVNTIC0gOTk0LCA3DQotWyBdIFMgLSAxMDAxLCAxDQotW3tdIExCUkFDRSAtIDEwMDIsIDENCi1bICBdIFMgLSAxMDAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAxMCwgMQ0KLVsgXSBTIC0gMTAxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDEyLCA1DQotWyAgXSBTIC0gMTAxNywgMg0KLVt9XSBSQlJBQ0UgLSAxMDE5LCAxDQotWw0KLV0gUyAtIDEwMjAsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwMjIsIDINCi1bI2NoYXB0ZXIxXSBTRUxFQ1RPUl9JRCAtIDEwMjQsIDkNCi1bIF0gUyAtIDEwMzMsIDENCi1be10gTEJSQUNFIC0gMTAzNCwgMQ0KLVsgIF0gUyAtIDEwMzUsIDINCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDM3LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDQ3LCAxDQotWyBdIFMgLSAxMDQ4LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDQ5LCA2DQotWyAgXSBTIC0gMTA1NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDU3LCAxDQotWw0KLV0gUyAtIDEwNTgsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDYwLCAzDQotWyBdIFMgLSAxMDYzLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMDY0LCAxDQotWyBdIFMgLSAxMDY1LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjYsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMDY3LCAxMg0KLVsgXSBTIC0gMTA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDgwLCAxDQotWyAgXSBTIC0gMTA4MSwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDgzLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDk0LCAxDQotWyBdIFMgLSAxMDk1LCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwOTYsIDENCi1bICBdIFMgLSAxMDk3LCAyDQotW31dIFJCUkFDRSAtIDEwOTksIDENCi1bDQotXSBTIC0gMTEwMCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTAyLCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTEwMywgMTINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExMTUsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMTYsIDINCi1bIF0gUyAtIDExMTgsIDENCi1be10gTEJSQUNFIC0gMTExOSwgMQ0KLVsgIF0gUyAtIDExMjAsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTEyMiwgMTENCi1bIF0gUyAtIDExMzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTEzNCwgMQ0KLVsgXSBTIC0gMTEzNSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExMzYsIDQNCi1bICBdIFMgLSAxMTQwLCAyDQotW31dIFJCUkFDRSAtIDExNDIsIDENCi1bDQotXSBTIC0gMTE0MywgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxMTQ1LCAxDQotWyBdIFMgLSAxMTQ2LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTQ3LCAxDQotWyBdIFMgLSAxMTQ4LCAxDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExNDksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTUwLCAxMg0KLVsgXSBTIC0gMTE2MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTYzLCAxDQotWyAgXSBTIC0gMTE2NCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTY2LCAxMQ0KLVsgXSBTIC0gMTE3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTc4LCAxDQotWyBdIFMgLSAxMTc5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTE4MCwgNA0KLVsgIF0gUyAtIDExODQsIDINCi1bfV0gUkJSQUNFIC0gMTE4NiwgMQ0KLVsNCi1dIFMgLSAxMTg3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExODksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTkwLCAxMg0KLVsgXSBTIC0gMTIwMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjAzLCAxDQotWyAgXSBTIC0gMTIwNCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjA2LCAxMQ0KLVsgXSBTIC0gMTIxNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjE4LCAxDQotWyBdIFMgLSAxMjE5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIyMCwgNA0KLVsgIF0gUyAtIDEyMjQsIDINCi1bfV0gUkJSQUNFIC0gMTIyNiwgMQ0KLVsNCi1dIFMgLSAxMjI3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyMjksIDENCi1bLmV4dGVybmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDEyMzAsIDkNCi1bOnZpc2l0ZWRdIFNFTEVDVE9SX1BTRVVETyAtIDEyMzksIDgNCi1bIF0gUyAtIDEyNDcsIDENCi1be10gTEJSQUNFIC0gMTI0OCwgMQ0KLVsgIF0gUyAtIDEyNDksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI1MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjU2LCAxDQotWyBdIFMgLSAxMjU3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI1OCwgNA0KLVsgIF0gUyAtIDEyNjIsIDINCi1bfV0gUkJSQUNFIC0gMTI2NCwgMQ0KLVsNCi1dIFMgLSAxMjY1LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyNjcsIDENCi1bOmZvY3VzXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjY4LCA2DQotWzpob3Zlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTI3NCwgNg0KLVsgXSBTIC0gMTI4MCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjgxLCAxDQotWyAgXSBTIC0gMTI4MiwgMg0KLVtiYWNrZ3JvdW5kXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyODQsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyOTQsIDENCi1bIF0gUyAtIDEyOTUsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI5NiwgNQ0KLVsgIF0gUyAtIDEzMDEsIDINCi1bfV0gUkJSQUNFIC0gMTMwMywgMQ0KLVsNCi1dIFMgLSAxMzA0LCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMDYsIDQNCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzEwLCA5DQotWyBdIFMgLSAxMzE5LCAxDQotW3tdIExCUkFDRSAtIDEzMjAsIDENCi1bICBdIFMgLSAxMzIxLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzIzLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzMjksIDENCi1bIF0gUyAtIDEzMzAsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzMSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTMzNSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzM2LCA0DQotWyAgXSBTIC0gMTM0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMzQyLCAxDQotWw0KLV0gUyAtIDEzNDMsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTM0NSwgNA0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDEzNDksIDkNCi1bIF0gUyAtIDEzNTgsIDENCi1be10gTEJSQUNFIC0gMTM1OSwgMQ0KLVsgIF0gUyAtIDEzNjAsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNjIsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM2OCwgMQ0KLVsgXSBTIC0gMTM2OSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzcwLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzksIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4MCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM4NywgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzg4LCA3DQotWyAgXSBTIC0gMTM5NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzk3LCAxDQotWw0KLV0gUyAtIDEzOTgsIDINCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDAwLCA5DQotWyBdIFMgLSAxNDA5LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDEwLCAxDQotWyBdIFMgLSAxNDExLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0MTIsIDENCi1bIF0gUyAtIDE0MTMsIDENCi1be10gTEJSQUNFIC0gMTQxNCwgMQ0KLVsgIF0gUyAtIDE0MTUsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MTcsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyMywgMQ0KLVsgXSBTIC0gMTQyNCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDI1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDI5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MzAsIDQNCi1bICBdIFMgLSAxNDM0LCAyDQotW31dIFJCUkFDRSAtIDE0MzYsIDENCi1bDQotXSBTIC0gMTQzNywgMg0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDE0MzksIDkNCi1bIF0gUyAtIDE0NDgsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0NDksIDENCi1bIF0gUyAtIDE0NTAsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ1MSwgMQ0KLVsgXSBTIC0gMTQ1MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNDUzLCAxDQotWyAgXSBTIC0gMTQ1NCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ1NiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDYyLCAxDQotWyBdIFMgLSAxNDYzLCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjQsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NjgsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2OSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ3MywgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDc0LCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDgxLCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0ODIsIDcNCi1bICBdIFMgLSAxNDg5LCAyDQotW31dIFJCUkFDRSAtIDE0OTEsIDENCi1bDQotXSBTIC0gMTQ5MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDk0LCAxDQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE0OTUsIDEzDQotWyBdIFMgLSAxNTA4LCAxDQotW3tdIExCUkFDRSAtIDE1MDksIDENCi1bICBdIFMgLSAxNTEwLCAyDQotW2ZvbnQtc2l6ZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTEyLCA5DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjEsIDENCi1bIF0gUyAtIDE1MjIsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MjYsIDENCi1bIF0gUyAtIDE1MjcsIDENCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUzOSwgMQ0KLVsgXSBTIC0gMTU0MCwgMQ0KLVtub3JtYWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTU0MSwgNg0KLVsgIF0gUyAtIDE1NDcsIDINCi1bfV0gUkJSQUNFIC0gMTU0OSwgMQ0KLVsNCi1dIFMgLSAxNTUwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NTIsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU1MywgOA0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNTYxLCA3DQotWyBdIFMgLSAxNTY4LCAxDQotW3tdIExCUkFDRSAtIDE1NjksIDENCi1bIF0gUyAtIDE1NzAsIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTcxLCA3DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NzgsIDENCi1bIF0gUyAtIDE1NzksIDENCi1bIlNwZWNpYWwhICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE1ODAsIDExDQotWyBdIFMgLSAxNTkxLCAxDQotW31dIFJCUkFDRSAtIDE1OTIsIDENCi1bDQotXSBTIC0gMTU5MywgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTk1LCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1OTYsIDgNCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTYwNCwgMTMNCi1bIF0gUyAtIDE2MTcsIDENCi1be10gTEJSQUNFIC0gMTYxOCwgMQ0KLVsgXSBTIC0gMTYxOSwgMQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MjUsIDENCi1bIF0gUyAtIDE2MjYsIDENCi1bI2ZmZDgwMF0gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE2MjcsIDcNCi1bIF0gUyAtIDE2MzQsIDENCi1bfV0gUkJSQUNFIC0gMTYzNSwgMQ0KLVsNCi1dIFMgLSAxNjM2LCAyDQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2MzgsIDQNCi1bIF0gUyAtIDE2NDIsIDENCi1be10gTEJSQUNFIC0gMTY0MywgMQ0KLVsgXSBTIC0gMTY0NCwgMQ0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjQ1LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU2LCAxDQotWyBdIFMgLSAxNjU3LCAxDQotW0Jhc2tlcnZpbGxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2NTgsIDExDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY2OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY3MCwgMQ0KLVsiSGVpc2kgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTY3MSwgMTcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjg4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjg5LCAxDQotW1N5bWJvbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjkwLCA2DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY5NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY5NywgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjk4LCA1DQotWyBdIFMgLSAxNzAzLCAxDQotW31dIFJCUkFDRSAtIDE3MDQsIDENCi1bDQotXSBTIC0gMTcwNSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzA3LCAxDQotWzpsYW5nKGphLWpwKV0gU0VMRUNUT1JfUFNFVURPIC0gMTcwOCwgMTINCi1bIF0gUyAtIDE3MjAsIDENCi1be10gTEJSQUNFIC0gMTcyMSwgMQ0KLVsgXSBTIC0gMTcyMiwgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcyNywgMQ0KLVsgXSBTIC0gMTcyOCwgMQ0KLVs5MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3MjksIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3MzIsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczMywgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3MzcsIDENCi1bMTZwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc0MiwgMQ0KLVsiSGVpc2VpIE1pbmNobyBXOSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE3NDMsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc2MiwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzYzLCA1DQotWyBdIFMgLSAxNzY4LCAxDQotW31dIFJCUkFDRSAtIDE3NjksIDENCi1bDQotXSBTIC0gMTc3MCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzcyLCAxDQotWzpsYW5nKHpoLXR3KV0gU0VMRUNUT1JfUFNFVURPIC0gMTc3MywgMTINCi1bIF0gUyAtIDE3ODUsIDENCi1be10gTEJSQUNFIC0gMTc4NiwgMQ0KLVsgXSBTIC0gMTc4NywgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3ODgsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc5MiwgMQ0KLVsgXSBTIC0gMTc5MywgMQ0KLVs4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OTQsIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3OTcsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTc5OCwgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MDIsIDENCi1bMTYuNXB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxODAzLCA2DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODA5LCAxDQotWyJMaSBTdW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTgxMCwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MTksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MjAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgyMSwgNQ0KLVsgXSBTIC0gMTgyNiwgMQ0KLVt9XSBSQlJBQ0UgLSAxODI3LCAxDQotWw0KLV0gUyAtIDE4MjgsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDVkMmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcwNiArMCwwIEBACi1bQGNoYXJzZXRdIENIQVJTRVQgLSAwLCA4DQotWyBdIFMgLSA4LCAxDQotWyJJU08tODg1OS0xIl0gU1RSSU5HIC0gOSwgMTINCi1bO10gREVMSU1JVEVSIC0gMjEsIDENCi1bDQotDQotXSBTIC0gMjIsIDQNCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotW3VybCgiaG9nZS5jc3MiKV0gVVJJIC0gMzQsIDE1DQotWztdIERFTElNSVRFUiAtIDQ5LCAxDQotWw0KLV0gUyAtIDUwLCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDUyLCA3DQotWyBdIFMgLSA1OSwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gNjAsIDEzDQotWyBdIFMgLSA3MywgMQ0KLVt1cmwoaG9nZS5jc3MpXSBVUkkgLSA3NCwgMTMNCi1bO10gREVMSU1JVEVSIC0gODcsIDENCi1bDQotXSBTIC0gODgsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gOTAsIDcNCi1bIF0gUyAtIDk3LCAxDQotWyJob2dlLmNzcyJdIFNUUklORyAtIDk4LCAxMA0KLVsgXSBTIC0gMTA4LCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSAxMDksIDEzDQotWztdIERFTElNSVRFUiAtIDEyMiwgMQ0KLVsNCi1dIFMgLSAxMjMsIDINCi1bQElNUE9SVF0gSU1QT1JUIC0gMTI1LCA3DQotWyBdIFMgLSAxMzIsIDENCi1bJ2hvZ2UuY3NzJ10gU1RSSU5HIC0gMTMzLCAxMA0KLVsgXSBTIC0gMTQzLCAxDQotW21lZGlhMV0gTUVESVVNIC0gMTQ0LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVttZWRpYTJdIE1FRElVTSAtIDE1MSwgNg0KLVsgXSBTIC0gMTU3LCAxDQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1OCwgMQ0KLVsgXSBTIC0gMTU5LCAxDQotW21lZGlhM10gTUVESVVNIC0gMTYwLCA2DQotWztdIERFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0NCi1dIFMgLSAxNjcsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDE3MSwgNg0KLVsgXSBTIC0gMTc3LCAxDQotW3ByaW50XSBNRURJVU0gLSAxNzgsIDUNCi1bIF0gUyAtIDE4MywgMQ0KLVt7XSBMQlJBQ0UgLSAxODQsIDENCi1bDQotDQotXSBTIC0gMTg1LCA0DQotW31dIFJCUkFDRSAtIDE4OSwgMQ0KLVsNCi0NCi1dIFMgLSAxOTAsIDQNCi1bQHBhZ2VdIFBBR0UgLSAxOTQsIDUNCi1bIF0gUyAtIDE5OSwgMQ0KLVs6bGVmdF0gQ1NTX1BBR0VfU0VMRUNUT1IgLSAyMDAsIDUNCi1bIF0gUyAtIDIwNSwgMQ0KLVt7XSBMQlJBQ0UgLSAyMDYsIDENCi1bDQotDQotXSBTIC0gMjA3LCA0DQotW31dIFJCUkFDRSAtIDIxMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMTIsIDQNCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIxNiwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMTgsIDENCi1bIF0gUyAtIDIxOSwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjIwLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDIyMiwgMQ0KLVsgXSBTIC0gMjIzLCAxDQotW2gzXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjQsIDINCi1bIF0gUyAtIDIyNiwgMQ0KLVt7XSBMQlJBQ0UgLSAyMjcsIDENCi1bICBdIFMgLSAyMjgsIDINCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjMwLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNDEsIDENCi1bIF0gUyAtIDI0MiwgMQ0KLVtzYW5zLXNlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI0MywgMTANCi1bICBdIFMgLSAyNTMsIDINCi1bfV0gUkJSQUNFIC0gMjU1LCAxDQotWw0KLV0gUyAtIDI1NiwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjU4LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyNjAsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI2MSwgMg0KLVsgXSBTIC0gMjYzLCAxDQotW3tdIExCUkFDRSAtIDI2NCwgMQ0KLVsgIF0gUyAtIDI2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjcyLCAxDQotWyBdIFMgLSAyNzMsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNzQsIDQNCi1bICBdIFMgLSAyNzgsIDINCi1bfV0gUkJSQUNFIC0gMjgwLCAxDQotWw0KLV0gUyAtIDI4MSwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4MywgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg2LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4NywgMQ0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg4LCAxDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDI4OSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSAyOTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSAyOTEsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDI5NSwgMQ0KLVsgXSBTIC0gMjk2LCAxDQotW3tdIExCUkFDRSAtIDI5NywgMQ0KLVsgIF0gUyAtIDI5OCwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMDAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzA1LCAxDQotWyBdIFMgLSAzMDYsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMDcsIDQNCi1bICBdIFMgLSAzMTEsIDINCi1bfV0gUkJSQUNFIC0gMzEzLCAxDQotWw0KLV0gUyAtIDMxNCwgMg0KLVtib2R5XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzMTYsIDQNCi1bIF0gUyAtIDMyMCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzIxLCAxDQotWyBdIFMgLSAzMjIsIDENCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzIzLCAxDQotWyBdIFMgLSAzMjQsIDENCi1be10gTEJSQUNFIC0gMzI1LCAxDQotWyAgXSBTIC0gMzI2LCAyDQotW2xpbmUtaGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzM5LCAxDQotWyBdIFMgLSAzNDAsIDENCi1bMS4zXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAzNDEsIDMNCi1bICBdIFMgLSAzNDQsIDINCi1bfV0gUkJSQUNFIC0gMzQ2LCAxDQotWw0KLV0gUyAtIDM0NywgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM0OSwgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzUyLCAxDQotW29sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTMsIDINCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1NSwgMQ0KLVtsaV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU2LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTgsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU5LCAxDQotWyBdIFMgLSAzNjAsIDENCi1be10gTEJSQUNFIC0gMzYxLCAxDQotWyBdIFMgLSAzNjIsIDENCi1bfV0gUkJSQUNFIC0gMzYzLCAxDQotWw0KLV0gUyAtIDM2NCwgMg0KLVttYXRoXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNjYsIDQNCi1bIF0gUyAtIDM3MCwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzcxLCAxDQotWyBdIFMgLSAzNzIsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzczLCAxDQotWyBdIFMgLSAzNzQsIDENCi1be10gTEJSQUNFIC0gMzc1LCAxDQotWyAgXSBTIC0gMzc2LCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3OCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzg5LCAxDQotWyBdIFMgLSAzOTAsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzkxLCAxDQotWyAgXSBTIC0gMzkyLCAyDQotW31dIFJCUkFDRSAtIDM5NCwgMQ0KLVsNCi1dIFMgLSAzOTUsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM5NywgMg0KLVsub3BlbmVyXSBTRUxFQ1RPUl9DTEFTUyAtIDM5OSwgNw0KLVsgXSBTIC0gNDA2LCAxDQotWytdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSA0MDcsIDENCi1bIF0gUyAtIDQwOCwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDA5LCAyDQotWyBdIFMgLSA0MTEsIDENCi1be10gTEJSQUNFIC0gNDEyLCAxDQotWyAgXSBTIC0gNDEzLCAyDQotW21hcmdpbi10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDE1LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MjUsIDENCi1bIF0gUyAtIDQyNiwgMQ0KLVstNW1tXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA0MjcsIDQNCi1bICBdIFMgLSA0MzEsIDINCi1bfV0gUkJSQUNFIC0gNDMzLCAxDQotWw0KLV0gUyAtIDQzNCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDM2LCAyDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQzOCwgMQ0KLVt0aXRsZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0MzksIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ0NCwgMQ0KLVsgXSBTIC0gNDQ1LCAxDQotW3tdIExCUkFDRSAtIDQ0NiwgMQ0KLVsgIF0gUyAtIDQ0NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0NDksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDU0LCAxDQotWyBdIFMgLSA0NTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0NTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDYwLCAxDQotWyAgXSBTIC0gNDYxLCAyDQotW31dIFJCUkFDRSAtIDQ2MywgMQ0KLVsNCi1dIFMgLSA0NjQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDY2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQ3MCwgMQ0KLVtjbGFzc10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0NzEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNDc2LCAxDQotW2V4YW1wbGVdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDQ3NywgNw0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDg0LCAxDQotWyBdIFMgLSA0ODUsIDENCi1be10gTEJSQUNFIC0gNDg2LCAxDQotWyAgXSBTIC0gNDg3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ4OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0OTQsIDENCi1bIF0gUyAtIDQ5NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDAsIDENCi1bICBdIFMgLSA1MDEsIDINCi1bfV0gUkJSQUNFIC0gNTAzLCAxDQotWw0KLV0gUyAtIDUwNCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1MDYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTEwLCAxDQotW2hlbGxvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUxMSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MTYsIDENCi1bIkNsZXZlbGFuZCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUxNywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDUyOCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MjksIDENCi1bZ29vZGJ5ZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MzAsIDcNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTM3LCAxDQotWyJDb2x1bWJ1cyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUzOCwgMTANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU0OCwgMQ0KLVsgXSBTIC0gNTQ5LCAxDQotW3tdIExCUkFDRSAtIDU1MCwgMQ0KLVsgIF0gUyAtIDU1MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTU4LCAxDQotWyBdIFMgLSA1NTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA1NjAsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY0LCAxDQotWyAgXSBTIC0gNTY1LCAyDQotW31dIFJCUkFDRSAtIDU2NywgMQ0KLVsNCi1dIFMgLSA1NjgsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTcwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDU3MSwgMQ0KLVtyZWxdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTcyLCAzDQotW349XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1NzUsIDINCi1bImNvcHlyaWdodCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDU3NywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU4OCwgMQ0KLVsgXSBTIC0gNTg5LCAxDQotW3tdIExCUkFDRSAtIDU5MCwgMQ0KLVsgIF0gUyAtIDU5MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1OTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTk4LCAxDQotWyBdIFMgLSA1OTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2MDAsIDQNCi1bICBdIFMgLSA2MDQsIDINCi1bfV0gUkJSQUNFIC0gNjA2LCAxDQotWw0KLV0gUyAtIDYwNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA2MDksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjEwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjExLCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDYxNSwgMQ0KLVsiaHR0cDovL3d3dy53My5vcmcvIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjE2LCAyMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjM2LCAxDQotWyBdIFMgLSA2MzcsIDENCi1be10gTEJSQUNFIC0gNjM4LCAxDQotWyAgXSBTIC0gNjM5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY0MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NDYsIDENCi1bIF0gUyAtIDY0NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY0OCwgNA0KLVsgIF0gUyAtIDY1MiwgMg0KLVt9XSBSQlJBQ0UgLSA2NTQsIDENCi1bDQotXSBTIC0gNjU1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY1NywgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2NTgsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2NTksIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjYzLCAxDQotW2ZyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2NjQsIDINCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDY2NiwgMQ0KLVsgXSBTIC0gNjY3LCAxDQotW3tdIExCUkFDRSAtIDY2OCwgMQ0KLVsgIF0gUyAtIDY2OSwgMg0KLVtkaXNwbGF5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY3MSwgNw0KLVsgXSBTIC0gNjc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY3OSwgMQ0KLVsgXSBTIC0gNjgwLCAxDQotW25vbmVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgxLCA0DQotWyAgXSBTIC0gNjg1LCAyDQotW31dIFJCUkFDRSAtIDY4NywgMQ0KLVsNCi1dIFMgLSA2ODgsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjkwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY5MSwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY5MiwgNA0KLVt8PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjk2LCAyDQotWyJlbiJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY5OCwgNA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzAyLCAxDQotWyBdIFMgLSA3MDMsIDENCi1be10gTEJSQUNFIC0gNzA0LCAxDQotWyAgXSBTIC0gNzA1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDcwNywgNQ0KLVsgXSBTIC0gNzEyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcxMywgMQ0KLVsgXSBTIC0gNzE0LCAxDQotW3JlZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3MTUsIDMNCi1bICBdIFMgLSA3MTgsIDINCi1bfV0gUkJSQUNFIC0gNzIwLCAxDQotWw0KLV0gUyAtIDcyMSwgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzIzLCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDczMSwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNzMyLCA5DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDc0MSwgMQ0KLVtyb21lb10gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNzQyLCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3NDcsIDENCi1bDQotXSBTIC0gNzQ4LCAyDQotW3tdIExCUkFDRSAtIDc1MCwgMQ0KLVsgIF0gUyAtIDc1MSwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzUzLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3NjUsIDENCi1bIF0gUyAtIDc2NiwgMQ0KLVsiTGF3cmVuY2UgT2xpdmllciJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDc2NywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3ODUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc4NiwgMQ0KLVtjaGFybGVzXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc4NywgNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc5NCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzk1LCAxDQotW21hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk2LCA0DQotWyAgXSBTIC0gODAwLCAyDQotW31dIFJCUkFDRSAtIDgwMiwgMQ0KLVsNCi1dIFMgLSA4MDMsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDgwNSwgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA4MTMsIDENCi1bIF0gUyAtIDgxNCwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gODE1LCA5DQotWyBdIFMgLSA4MjQsIDENCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gODI1LCAxDQotWyBdIFMgLSA4MjYsIDENCi1banVsaWV0XSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA4MjcsIDYNCi1bIF0gUyAtIDgzMywgMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gODM0LCAxDQotWw0KLV0gUyAtIDgzNSwgMg0KLVt7XSBMQlJBQ0UgLSA4MzcsIDENCi1bICBdIFMgLSA4MzgsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg0MCwgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODUyLCAxDQotWyBdIFMgLSA4NTMsIDENCi1bIlZpdmllbiBMZWlnaCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDg1NCwgMTQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NjgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg2OSwgMQ0KLVt2aWN0b3JpYV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NzAsIDgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NzgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg3OSwgMQ0KLVtmZW1hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODgwLCA2DQotWyAgXSBTIC0gODg2LCAyDQotW31dIFJCUkFDRSAtIDg4OCwgMQ0KLVsNCi1dIFMgLSA4ODksIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gODkxLCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA4OTIsIDkNCi1bIF0gUyAtIDkwMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MDIsIDENCi1bICBdIFMgLSA5MDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkxMCwgMQ0KLVsgXSBTIC0gOTExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDkxMiwgNQ0KLVsgIF0gUyAtIDkxNywgMg0KLVt9XSBSQlJBQ0UgLSA5MTksIDENCi1bDQotXSBTIC0gOTIwLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5MjIsIDkNCi1bIF0gUyAtIDkzMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MzIsIDENCi1bICBdIFMgLSA5MzMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTM1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk0MCwgMQ0KLVsgXSBTIC0gOTQxLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk0MiwgNQ0KLVsgIF0gUyAtIDk0NywgMg0KLVt9XSBSQlJBQ0UgLSA5NDksIDENCi1bDQotXSBTIC0gOTUwLCAyDQotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5NTIsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk1NCwgOQ0KLVsgXSBTIC0gOTYzLCAxDQotW3tdIExCUkFDRSAtIDk2NCwgMQ0KLVsgIF0gUyAtIDk2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5NjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTcyLCAxDQotWyBdIFMgLSA5NzMsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTc0LCA1DQotWyAgXSBTIC0gOTc5LCAyDQotW31dIFJCUkFDRSAtIDk4MSwgMQ0KLVsNCi1dIFMgLSA5ODIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTg0LCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5ODUsIDkNCi1bLm1hcmluZV0gU0VMRUNUT1JfQ0xBU1MgLSA5OTQsIDcNCi1bIF0gUyAtIDEwMDEsIDENCi1be10gTEJSQUNFIC0gMTAwMiwgMQ0KLVsgIF0gUyAtIDEwMDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDEwLCAxDQotWyBdIFMgLSAxMDExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwMTIsIDUNCi1bICBdIFMgLSAxMDE3LCAyDQotW31dIFJCUkFDRSAtIDEwMTksIDENCi1bDQotXSBTIC0gMTAyMCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTAyMiwgMg0KLVsjY2hhcHRlcjFdIFNFTEVDVE9SX0lEIC0gMTAyNCwgOQ0KLVsgXSBTIC0gMTAzMywgMQ0KLVt7XSBMQlJBQ0UgLSAxMDM0LCAxDQotWyAgXSBTIC0gMTAzNSwgMg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMzcsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNDcsIDENCi1bIF0gUyAtIDEwNDgsIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwNDksIDYNCi1bICBdIFMgLSAxMDU1LCAyDQotW31dIFJCUkFDRSAtIDEwNTcsIDENCi1bDQotXSBTIC0gMTA1OCwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjAsIDMNCi1bIF0gUyAtIDEwNjMsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDEwNjQsIDENCi1bIF0gUyAtIDEwNjUsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2NiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDEwNjcsIDEyDQotWyBdIFMgLSAxMDc5LCAxDQotW3tdIExCUkFDRSAtIDEwODAsIDENCi1bICBdIFMgLSAxMDgxLCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwODMsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwOTQsIDENCi1bIF0gUyAtIDEwOTUsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTA5NiwgMQ0KLVsgIF0gUyAtIDEwOTcsIDINCi1bfV0gUkJSQUNFIC0gMTA5OSwgMQ0KLVsNCi1dIFMgLSAxMTAwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMDIsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTAzLCAxMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTExNSwgMQ0KLVtlbV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTExNiwgMg0KLVsgXSBTIC0gMTExOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTE5LCAxDQotWyAgXSBTIC0gMTEyMCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTIyLCAxMQ0KLVsgXSBTIC0gMTEzMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTM0LCAxDQotWyBdIFMgLSAxMTM1LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTEzNiwgNA0KLVsgIF0gUyAtIDExNDAsIDINCi1bfV0gUkJSQUNFIC0gMTE0MiwgMQ0KLVsNCi1dIFMgLSAxMTQzLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDExNDUsIDENCi1bIF0gUyAtIDExNDYsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExNDcsIDENCi1bIF0gUyAtIDExNDgsIDENCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE0OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExNTAsIDEyDQotWyBdIFMgLSAxMTYyLCAxDQotW3tdIExCUkFDRSAtIDExNjMsIDENCi1bICBdIFMgLSAxMTY0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExNjYsIDExDQotWyBdIFMgLSAxMTc3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExNzgsIDENCi1bIF0gUyAtIDExNzksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTgwLCA0DQotWyAgXSBTIC0gMTE4NCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTg2LCAxDQotWw0KLV0gUyAtIDExODcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE4OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExOTAsIDEyDQotWyBdIFMgLSAxMjAyLCAxDQotW3tdIExCUkFDRSAtIDEyMDMsIDENCi1bICBdIFMgLSAxMjA0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyMDYsIDExDQotWyBdIFMgLSAxMjE3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyMTgsIDENCi1bIF0gUyAtIDEyMTksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjIwLCA0DQotWyAgXSBTIC0gMTIyNCwgMg0KLVt9XSBSQlJBQ0UgLSAxMjI2LCAxDQotWw0KLV0gUyAtIDEyMjcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTIyOSwgMQ0KLVsuZXh0ZXJuYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTIzMCwgOQ0KLVs6dmlzaXRlZF0gU0VMRUNUT1JfUFNFVURPIC0gMTIzOSwgOA0KLVsgXSBTIC0gMTI0NywgMQ0KLVt7XSBMQlJBQ0UgLSAxMjQ4LCAxDQotWyAgXSBTIC0gMTI0OSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjUxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyNTYsIDENCi1bIF0gUyAtIDEyNTcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjU4LCA0DQotWyAgXSBTIC0gMTI2MiwgMg0KLVt9XSBSQlJBQ0UgLSAxMjY0LCAxDQotWw0KLV0gUyAtIDEyNjUsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTI2NywgMQ0KLVs6Zm9jdXNdIFNFTEVDVE9SX1BTRVVETyAtIDEyNjgsIDYNCi1bOmhvdmVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjc0LCA2DQotWyBdIFMgLSAxMjgwLCAxDQotW3tdIExCUkFDRSAtIDEyODEsIDENCi1bICBdIFMgLSAxMjgyLCAyDQotW2JhY2tncm91bmRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI4NCwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI5NCwgMQ0KLVsgXSBTIC0gMTI5NSwgMQ0KLVt3aGl0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjk2LCA1DQotWyAgXSBTIC0gMTMwMSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzAzLCAxDQotWw0KLV0gUyAtIDEzMDQsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMwNiwgNA0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDEzMTAsIDkNCi1bIF0gUyAtIDEzMTksIDENCi1be10gTEJSQUNFIC0gMTMyMCwgMQ0KLVsgIF0gUyAtIDEzMjEsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzMjMsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTMyOSwgMQ0KLVsgXSBTIC0gMTMzMCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzMxLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzM1LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzYsIDQNCi1bICBdIFMgLSAxMzQwLCAyDQotW31dIFJCUkFDRSAtIDEzNDIsIDENCi1bDQotXSBTIC0gMTM0MywgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzQ1LCA0DQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTM0OSwgOQ0KLVsgXSBTIC0gMTM1OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzU5LCAxDQotWyAgXSBTIC0gMTM2MCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM2MiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzY4LCAxDQotWyBdIFMgLSAxMzY5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzAsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3NSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3OSwgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzgwLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzg3LCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODgsIDcNCi1bICBdIFMgLSAxMzk1LCAyDQotW31dIFJCUkFDRSAtIDEzOTcsIDENCi1bDQotXSBTIC0gMTM5OCwgMg0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDE0MDAsIDkNCi1bIF0gUyAtIDE0MDksIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0MTAsIDENCi1bIF0gUyAtIDE0MTEsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQxMiwgMQ0KLVsgXSBTIC0gMTQxMywgMQ0KLVt7XSBMQlJBQ0UgLSAxNDE0LCAxDQotWyAgXSBTIC0gMTQxNSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQxNywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDIzLCAxDQotWyBdIFMgLSAxNDI0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MjUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0MjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQzMCwgNA0KLVsgIF0gUyAtIDE0MzQsIDINCi1bfV0gUkJSQUNFIC0gMTQzNiwgMQ0KLVsNCi1dIFMgLSAxNDM3LCAyDQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQzOSwgOQ0KLVsgXSBTIC0gMTQ0OCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQ0OSwgMQ0KLVsgXSBTIC0gMTQ1MCwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDUxLCAxDQotWyBdIFMgLSAxNDUyLCAxDQotW3tdIExCUkFDRSAtIDE0NTMsIDENCi1bICBdIFMgLSAxNDU0LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDU2LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0NjIsIDENCi1bIF0gUyAtIDE0NjMsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2NCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ2OCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY5LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDczLCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NzQsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0ODEsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ4MiwgNw0KLVsgIF0gUyAtIDE0ODksIDINCi1bfV0gUkJSQUNFIC0gMTQ5MSwgMQ0KLVsNCi1dIFMgLSAxNDkyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0OTQsIDENCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTQ5NSwgMTMNCi1bIF0gUyAtIDE1MDgsIDENCi1be10gTEJSQUNFIC0gMTUwOSwgMQ0KLVsgIF0gUyAtIDE1MTAsIDINCi1bZm9udC1zaXplXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MTIsIDkNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUyMSwgMQ0KLVsgXSBTIC0gMTUyMiwgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1MjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUyNiwgMQ0KLVsgXSBTIC0gMTUyNywgMQ0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTI4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTM5LCAxDQotWyBdIFMgLSAxNTQwLCAxDQotW25vcm1hbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNTQxLCA2DQotWyAgXSBTIC0gMTU0NywgMg0KLVt9XSBSQlJBQ0UgLSAxNTQ5LCAxDQotWw0KLV0gUyAtIDE1NTAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU1MiwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTUzLCA4DQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDE1NjEsIDcNCi1bIF0gUyAtIDE1NjgsIDENCi1be10gTEJSQUNFIC0gMTU2OSwgMQ0KLVsgXSBTIC0gMTU3MCwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1NzEsIDcNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU3OCwgMQ0KLVsgXSBTIC0gMTU3OSwgMQ0KLVsiU3BlY2lhbCEgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTU4MCwgMTENCi1bIF0gUyAtIDE1OTEsIDENCi1bfV0gUkJSQUNFIC0gMTU5MiwgMQ0KLVsNCi1dIFMgLSAxNTkzLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1OTUsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU5NiwgOA0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNjA0LCAxMw0KLVsgXSBTIC0gMTYxNywgMQ0KLVt7XSBMQlJBQ0UgLSAxNjE4LCAxDQotWyBdIFMgLSAxNjE5LCAxDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2MjAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYyNSwgMQ0KLVsgXSBTIC0gMTYyNiwgMQ0KLVsjZmZkODAwXSBERUNMQVJBVElPTl9WQUxVRV9IQVNIIC0gMTYyNywgNw0KLVsgXSBTIC0gMTYzNCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNjM1LCAxDQotWw0KLV0gUyAtIDE2MzYsIDINCi1bQk9EWV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTYzOCwgNA0KLVsgXSBTIC0gMTY0MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNjQzLCAxDQotWyBdIFMgLSAxNjQ0LCAxDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2NDUsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2NTYsIDENCi1bIF0gUyAtIDE2NTcsIDENCi1bQmFza2VydmlsbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY1OCwgMTENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjY5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjcwLCAxDQotWyJIZWlzaSBNaW5jaG8gVzMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNjcxLCAxNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2ODgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2ODksIDENCi1bU3ltYm9sXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTAsIDYNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjk2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjk3LCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTgsIDUNCi1bIF0gUyAtIDE3MDMsIDENCi1bfV0gUkJSQUNFIC0gMTcwNCwgMQ0KLVsNCi1dIFMgLSAxNzA1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3MDcsIDENCi1bOmxhbmcoamEtanApXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzA4LCAxMg0KLVsgXSBTIC0gMTcyMCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzIxLCAxDQotWyBdIFMgLSAxNzIyLCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcyMywgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzI3LCAxDQotWyBdIFMgLSAxNzI4LCAxDQotWzkwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTcyOSwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTczMiwgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzMzLCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTczNywgMQ0KLVsxNnB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzM4LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzQyLCAxDQotWyJIZWlzZWkgTWluY2hvIFc5Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTc0MywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzYxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzYyLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE3NjMsIDUNCi1bIF0gUyAtIDE3NjgsIDENCi1bfV0gUkJSQUNFIC0gMTc2OSwgMQ0KLVsNCi1dIFMgLSAxNzcwLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3NzIsIDENCi1bOmxhbmcoemgtdHcpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzczLCAxMg0KLVsgXSBTIC0gMTc4NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzg2LCAxDQotWyBdIFMgLSAxNzg3LCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTc4OCwgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzkyLCAxDQotWyBdIFMgLSAxNzkzLCAxDQotWzgwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5NCwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc5NywgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzk4LCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgwMiwgMQ0KLVsxNi41cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE4MDMsIDYNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MDksIDENCi1bIkxpIFN1bmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxODEwLCA5DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgxOSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgyMCwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxODIxLCA1DQotWyBdIFMgLSAxODI2LCAxDQotW31dIFJCUkFDRSAtIDE4MjcsIDENCi1bDQotXSBTIC0gMTgyOCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjE3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLVtkZWNsYXJhdGlvbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMCwgMTENCi1bIF0gUyAtIDExLCAxDQotW3tdIExCUkFDRSAtIDEyLCAxDQotWw0KLQldIFMgLSAxMywgMw0KLVtkaW1lbnNpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYsIDkNCi1bIF0gUyAtIDI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI2LCAxDQotWyBdIFMgLSAyNywgMQ0KLVsxMDBleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjgsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzMsIDENCi1bDQotCV0gUyAtIDM0LCAzDQotW2Z1bmN0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3LCA4DQotWyBdIFMgLSA0NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NiwgMQ0KLVsgXSBTIC0gNDcsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNDgsIDUNCi1bMTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA1MywgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDU2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA1NywgMQ0KLVsyMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDU4LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDYyLCAxDQotWzMwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNjMsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA2NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjcsIDENCi1bNDAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA2OCwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDcxLCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDczLCAxDQotW2Zvcm1hdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNzQsIDcNCi1bImludGVsbGlmb250Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODEsIDEzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gOTQsIDENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA5NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTYsIDENCi1bbG9jYWwoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDk3LCA2DQotWyJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMDMsIDI5DQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTMyLCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzMywgMQ0KLVsNCi0JXSBTIC0gMTM0LCAzDQotW2hhc2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM3LCA0DQotWyBdIFMgLSAxNDEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyLCAxDQotWyBdIFMgLSAxNDMsIDENCi1bI2FhYmJjY10gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE0NCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTEsIDENCi1bDQotCV0gUyAtIDE1MiwgMw0KLVtpZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTUsIDUNCi1bIF0gUyAtIDE2MCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjEsIDENCi1bIF0gUyAtIDE2MiwgMQ0KLVthbnldIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0JXSBTIC0gMTY3LCAzDQotW251bWJlcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzAsIDYNCi1bIF0gUyAtIDE3NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzcsIDENCi1bIF0gUyAtIDE3OCwgMQ0KLVs5OTk5OV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE4NCwgMQ0KLVsNCi0JXSBTIC0gMTg1LCAzDQotW3BlcmNlbnRhZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTg4LCAxMA0KLVsgXSBTIC0gMTk4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5OSwgMQ0KLVsgXSBTIC0gMjAwLCAxDQotWzEwMCVdIERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0UgLSAyMDEsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjA1LCAxDQotWw0KLQldIFMgLSAyMDYsIDMNCi1bc3RyaW5nXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgNg0KLVsgXSBTIC0gMjE1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDIxNiwgMQ0KLVsgXSBTIC0gMjE3LCAxDQotWyJzdHJpbmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAyMTgsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjI2LCAxDQotWw0KLQldIFMgLSAyMjcsIDMNCi1bdW5pY29kZS1yYW5nZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMzAsIDEzDQotWyBdIFMgLSAyNDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQ0LCAxDQotWyBdIFMgLSAyNDUsIDENCi1bVSs/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI0NiwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI1MCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjUxLCAxDQotW1UrMTAwLTIyMF0gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI1MiwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjYyLCAxDQotW1UrND8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMjYzLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDI2OCwgMQ0KLVsNCi1dIFMgLSAyNjksIDINCi1bfV0gUkJSQUNFIC0gMjcxLCAxDQotWw0KLV0gUyAtIDI3MiwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZWQ1YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLVtAY2hhcnNldF0gQ0hBUlNFVCAtIDAsIDgNCi1bIF0gUyAtIDgsIDENCi1bIklTTy04ODU5LTEiXSBTVFJJTkcgLSA5LCAxMg0KLVs7XSBERUxJTUlURVIgLSAyMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMiwgNA0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bdXJsKCIuLi9zYW1wbGUyLmNzcyIpXSBVUkkgLSAzNCwgMjENCi1bIF0gUyAtIDU1LCAxDQotW3Byb2plY3Rpb25dIE1FRElVTSAtIDU2LCAxMA0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSA2NiwgMQ0KLVsgXSBTIC0gNjcsIDENCi1bdHZdIE1FRElVTSAtIDY4LCAyDQotWztdIERFTElNSVRFUiAtIDcwLCAxDQotWw0KLQ0KLV0gUyAtIDcxLCA0DQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDc1LCA0DQotWyBdIFMgLSA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSA4MCwgMQ0KLVsNCi0gICAgXSBTIC0gODEsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODcsIDUNCi1bIF0gUyAtIDkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzLCAxDQotWyBdIFMgLSA5NCwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMDAsIDENCi1bDQotICAgIF0gUyAtIDEwMSwgNg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNywgMTANCi1bIF0gUyAtIDExNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTgsIDENCi1bIF0gUyAtIDExOSwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIwLCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyNiwgMQ0KLVsNCi0gICAgXSBTIC0gMTI3LCA2DQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMzLCAxNg0KLVsgXSBTIC0gMTQ5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVsgXSBTIC0gMTUxLCAxDQotW3JnYihdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTUyLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNTYsIDENCi1bMTgxXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNTcsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2MSwgMQ0KLVsyNTNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE2MiwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY2LCAxDQotWzIxMV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTY3LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxNzEsIDENCi1bDQotXSBTIC0gMTcyLCAyDQotW31dIFJCUkFDRSAtIDE3NCwgMQ0KLVsNCi0NCi1dIFMgLSAxNzUsIDQNCi1bVUxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE3OSwgMg0KLVsgXSBTIC0gMTgxLCAxDQotW3tdIExCUkFDRSAtIDE4MiwgMQ0KLVsNCi0gICAgXSBTIC0gMTgzLCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE4OSwgNQ0KLVsgXSBTIC0gMTk0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5NSwgMQ0KLVsgXSBTIC0gMTk2LCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE5NywgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyMDIsIDENCi1bDQotICAgIF0gUyAtIDIwMywgNg0KLVtsaXN0LXN0eWxlLWltYWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgMTYNCi1bIF0gUyAtIDIyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMjYsIDENCi1bIF0gUyAtIDIyNywgMQ0KLVt1cmwoImltYWdlcy9sX2EwMS5naWYiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMjI4LCAyMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNTEsIDENCi1bDQotICAgIF0gUyAtIDI1MiwgNg0KLVtsaXN0LXN0eWxlLXBvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI1OCwgMTkNCi1bIF0gUyAtIDI3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNzgsIDENCi1bIF0gUyAtIDI3OSwgMQ0KLVtvdXRzaWRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI4MCwgNw0KLVsNCi1dIFMgLSAyODcsIDINCi1bfV0gUkJSQUNFIC0gMjg5LCAxDQotWw0KLQ0KLV0gUyAtIDI5MCwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjk0LCAyDQotWyBdIFMgLSAyOTYsIDENCi1be10gTEJSQUNFIC0gMjk3LCAxDQotWw0KLSAgICBdIFMgLSAyOTgsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzA0LCA1DQotWyBdIFMgLSAzMDksIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzEwLCAxDQotWyBdIFMgLSAzMTEsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzEyLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMxNywgMQ0KLVsNCi0gICAgXSBTIC0gMzE4LCA2DQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzI0LCAxMA0KLVsgXSBTIC0gMzM0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzNSwgMQ0KLVsgXSBTIC0gMzM2LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMzcsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzQzLCAxDQotWw0KLSAgICBdIFMgLSAzNDQsIDYNCi1bYm9yZGVyLWxlZnQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzUwLCAxNw0KLVsgXSBTIC0gMzY3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM2OCwgMQ0KLVsgXSBTIC0gMzY5LCAxDQotWyM5OTY2NjZdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAzNzAsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzc3LCAxDQotWw0KLSAgICBdIFMgLSAzNzgsIDYNCi1bcGFkZGluZy10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzg0LCAxMQ0KLVsgXSBTIC0gMzk1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM5NiwgMQ0KLVsgXSBTIC0gMzk3LCAxDQotWzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzk4LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQwMSwgMQ0KLVsNCi0gICAgXSBTIC0gNDAyLCA2DQotW3BhZGRpbmctcmlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDA4LCAxMw0KLVsgXSBTIC0gNDIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQyMiwgMQ0KLVsgXSBTIC0gNDIzLCAxDQotWzFjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI0LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQyNywgMQ0KLVsNCi0gICAgXSBTIC0gNDI4LCA2DQotW3BhZGRpbmctYm90dG9tXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQzNCwgMTQNCi1bIF0gUyAtIDQ0OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NDksIDENCi1bIF0gUyAtIDQ1MCwgMQ0KLVsyXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA0NTEsIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDUyLCAxDQotWw0KLSAgICBdIFMgLSA0NTMsIDYNCi1bcGFkZGluZy1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ1OSwgMTINCi1bIF0gUyAtIDQ3MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NzIsIDENCi1bIF0gUyAtIDQ3MywgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQ3NCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NzcsIDENCi1bDQotICAgIF0gUyAtIDQ3OCwgNg0KLVtib3JkZXItc3R5bGVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg0LCAxMg0KLVsgXSBTIC0gNDk2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NywgMQ0KLVsgXSBTIC0gNDk4LCAxDQotW3NvbGlkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5OSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDQsIDENCi1bDQotICAgIF0gUyAtIDUwNSwgNg0KLVtib3JkZXItdG9wLXdpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDUxMSwgMTYNCi1bIF0gUyAtIDUyNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1MjgsIDENCi1bIF0gUyAtIDUyOSwgMQ0KLVs0LjVleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTMwLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUzNSwgMQ0KLVsNCi0gICAgXSBTIC0gNTM2LCA2DQotW2JvcmRlci1yaWdodC13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NDIsIDE4DQotWyBdIFMgLSA1NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTYxLCAxDQotWyBdIFMgLSA1NjIsIDENCi1bNWluXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1NjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY2LCAxDQotWw0KLSAgICBdIFMgLSA1NjcsIDYNCi1bYm9yZGVyLWJvdHRvbS13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NzMsIDE5DQotWyBdIFMgLSA1OTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTkzLCAxDQotWyBdIFMgLSA1OTQsIDENCi1bNi4wMm1tXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1OTUsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjAxLCAxDQotWw0KLSAgICBdIFMgLSA2MDIsIDYNCi1bYm9yZGVyLWxlZnQtd2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjA4LCAxNw0KLVsgXSBTIC0gNjI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDYyNiwgMQ0KLVsgXSBTIC0gNjI3LCAxDQotWzddIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDYyOCwgMQ0KLVsNCi1dIFMgLSA2MjksIDINCi1bfV0gUkJSQUNFIC0gNjMxLCAxDQotWw0KLQ0KLV0gUyAtIDYzMiwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjM2LCAyDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDYzOCwgNw0KLVsgXSBTIC0gNjQ1LCAxDQotW3tdIExCUkFDRSAtIDY0NiwgMQ0KLVsNCi0gICAgXSBTIC0gNjQ3LCA2DQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjUzLCA3DQotWyBdIFMgLSA2NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjYxLCAxDQotWyBdIFMgLSA2NjIsIDENCi1bIkNoYXB0ZXIgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNjYzLCAxMA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjczLCAxDQotW2NvdW50ZXIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDY3NCwgOA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjgyLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgzLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2OTAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSA2OTEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY5MiwgMQ0KLVsiLiAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA2OTMsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjk3LCAxDQotWw0KLSAgICBdIFMgLSA2OTgsIDYNCi1bY291bnRlci1pbmNyZW1lbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA0LCAxNw0KLVsgXSBTIC0gNzIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcyMiwgMQ0KLVsgXSBTIC0gNzIzLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzI0LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDczMSwgMQ0KLVsNCi0gICAgXSBTIC0gNzMyLCA2DQotW2NvdW50ZXItcmVzZXRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzM4LCAxMw0KLVsgXSBTIC0gNzUxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc1MiwgMQ0KLVsgXSBTIC0gNzUzLCAxDQotW3NlY3Rpb25dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzU0LCA3DQotWw0KLV0gUyAtIDc2MSwgMg0KLVt9XSBSQlJBQ0UgLSA3NjMsIDENCi1bDQotDQotXSBTIC0gNzY0LCA0DQotW0lNR10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzY4LCAzDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDc3MSwgNw0KLVsgXSBTIC0gNzc4LCAxDQotW3tdIExCUkFDRSAtIDc3OSwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc4MCwgNw0KLVsgXSBTIC0gNzg3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc4OCwgMQ0KLVsgXSBTIC0gNzg5LCAxDQotW2F0dHIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDc5MCwgNQ0KLVthbHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk1LCAzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gNzk4LCAxDQotW31dIFJCUkFDRSAtIDc5OSwgMQ0KLVsNCi0NCi1dIFMgLSA4MDAsIDQNCi1bRElWXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDQsIDMNCi1bLnNhbXBsZV0gU0VMRUNUT1JfQ0xBU1MgLSA4MDcsIDcNCi1bIF0gUyAtIDgxNCwgMQ0KLVt7XSBMQlJBQ0UgLSA4MTUsIDENCi1bDQotICAgIF0gUyAtIDgxNiwgNg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4MjIsIDExDQotWyBdIFMgLSA4MzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODM0LCAxDQotWyBdIFMgLSA4MzUsIDENCi1bIlJvYnNvbiBDZWx0aWMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4MzYsIDE1DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODUxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NTIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NTMsIDEwDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDg2MywgMQ0KLVsNCi0gICAgXSBTIC0gODY0LCA2DQotW3Bvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg3MCwgOA0KLVsgXSBTIC0gODc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg3OSwgMQ0KLVsgXSBTIC0gODgwLCAxDQotW2Fic29sdXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MSwgOA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA4ODksIDENCi1bDQotICAgIF0gUyAtIDg5MCwgNg0KLVtsZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg5NiwgNA0KLVsgXSBTIC0gOTAwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkwMSwgMQ0KLVsgXSBTIC0gOTAyLCAxDQotWzgzMy41cGNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDkwMywgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5MTAsIDENCi1bDQotICAgIF0gUyAtIDkxMSwgNg0KLVt0b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTE3LCAzDQotWyBdIFMgLSA5MjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTIxLCAxDQotWyBdIFMgLSA5MjIsIDENCi1bOTAlXSBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFIC0gOTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDkyNiwgMQ0KLVsNCi0gICAgXSBTIC0gOTI3LCA2DQotW3dpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzMywgNQ0KLVsgXSBTIC0gOTM4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzOSwgMQ0KLVsgXSBTIC0gOTQwLCAxDQotWzEwMHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5NDEsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gOTQ2LCAxDQotWw0KLSAgICBdIFMgLSA5NDcsIDYNCi1baGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk1MywgNg0KLVsgXSBTIC0gOTU5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk2MCwgMQ0KLVsgXSBTIC0gOTYxLCAxDQotWzExMC43NzdweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTYyLCA5DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDk3MSwgMQ0KLVsNCi0gICAgXSBTIC0gOTcyLCA2DQotW2NsaXBdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTc4LCA0DQotWyBdIFMgLSA5ODIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTgzLCAxDQotWyBdIFMgLSA5ODQsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gOTg1LCA1DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA5OTAsIDENCi1bLTVweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTkxLCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gOTk1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA5OTYsIDENCi1bODBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTk3LCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTAwMSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTAwMiwgMQ0KLVsxMzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTAwMywgNQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwMDgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwMDksIDENCi1bMHB4XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxMDEwLCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDEzLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTAxNCwgMQ0KLVsNCi1dIFMgLSAxMDE1LCAyDQotW31dIFJCUkFDRSAtIDEwMTcsIDENCi1bDQotDQotXSBTIC0gMTAxOCwgNA0KLVtAZm9udC1mYWNlXSBGT05UX0ZBQ0UgLSAxMDIyLCAxMA0KLVsgXSBTIC0gMTAzMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDMzLCAxDQotWw0KLSAgICBdIFMgLSAxMDM0LCA2DQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNDAsIDExDQotWyBdIFMgLSAxMDUxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNTIsIDENCi1bIF0gUyAtIDEwNTMsIDENCi1bIlN3aXNzIDcyMSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEwNTQsIDExDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEwNjUsIDENCi1bDQotICAgIF0gUyAtIDEwNjYsIDYNCi1bc3JjXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNzIsIDMNCi1bIF0gUyAtIDEwNzUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA3NiwgMQ0KLVsgXSBTIC0gMTA3NywgMQ0KLVt1cmwoInN3aXNzNzIxdC5wZnIiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMTA3OCwgMjANCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwOTgsIDENCi1bZm9ybWF0KF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMDk5LCA3DQotWyJpbnRlbGxpZm9udCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDExMDYsIDEzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTExOSwgMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExMjAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExMjEsIDENCi1bbG9jYWwoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDExMjIsIDYNCi1bIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDExMjgsIDI5DQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTE1NywgMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMTU4LCAxDQotWw0KLSAgICBdIFMgLSAxMTU5LCA2DQotW3VuaWNvZGUtcmFuZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTE2NSwgMTMNCi1bIF0gUyAtIDExNzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE3OSwgMQ0KLVsgXSBTIC0gMTE4MCwgMQ0KLVtVKz8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE4MSwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExODUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExODYsIDENCi1bVSsxMDAtMjIwXSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE4NywgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExOTYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExOTcsIDENCi1bVSs0Pz9dIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAxMTk4LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyMDMsIDENCi1bDQotICAgIF0gUyAtIDEyMDQsIDYNCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTIxMCwgMTENCi1bIF0gUyAtIDEyMjEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTIyMiwgMQ0KLVsgXSBTIC0gMTIyMywgMQ0KLVsxMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMjQsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjI3LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjI4LCAxDQotWzIwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIyOSwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyMzIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyMzMsIDENCi1bMzAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjM0LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTIzNywgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTIzOCwgMQ0KLVs0MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMzksIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjQyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjQzLCAxDQotWzUwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTI0NCwgMw0KLVsNCi1dIFMgLSAxMjQ3LCAyDQotW31dIFJCUkFDRSAtIDEyNDksIDENCi1bDQotDQotXSBTIC0gMTI1MCwgNA0KLVtAcGFnZV0gUEFHRSAtIDEyNTQsIDUNCi1bIF0gUyAtIDEyNTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMTI2MCwgNQ0KLVsgXSBTIC0gMTI2NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjY2LCAxDQotW21hcmdpbi1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNjcsIDExDQotWyBdIFMgLSAxMjc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyNzksIDENCi1bIF0gUyAtIDEyODAsIDENCi1bNGNtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxMjgxLCAzDQotW31dIFJCUkFDRSAtIDEyODQsIDENCi1bDQotDQotXSBTIC0gMTI4NSwgNA0KLVtAbWVkaWFdIE1FRElBIC0gMTI4OSwgNg0KLVsgXSBTIC0gMTI5NSwgMQ0KLVthdXJhbF0gTUVESVVNIC0gMTI5NiwgNQ0KLVsgXSBTIC0gMTMwMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzAyLCAxDQotWw0KLSAgICBdIFMgLSAxMzAzLCA2DQotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzA5LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMTEsIDENCi1bIF0gUyAtIDEzMTIsIDENCi1bSDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMTMsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMxNSwgMQ0KLVsgXSBTIC0gMTMxNiwgMQ0KLVtIM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMxNywgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzE5LCAxDQotWyBdIFMgLSAxMzIwLCAxDQotW0g0XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzIxLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMjMsIDENCi1bIF0gUyAtIDEzMjQsIDENCi1bSDVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMjUsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMyNywgMQ0KLVsgXSBTIC0gMTMyOCwgMQ0KLVtINl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMyOSwgMg0KLVsgXSBTIC0gMTMzMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzMyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTMzMywgMTANCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNDMsIDEyDQotWyBdIFMgLSAxMzU1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNTYsIDENCi1bIF0gUyAtIDEzNTcsIDENCi1bcGF1bF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzU4LCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTM2MiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM2MywgMQ0KLVtjaGlsZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzY0LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzNjksIDENCi1bDQotICAgICAgICBdIFMgLSAxMzcwLCAxMA0KLVtzdHJlc3NdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM4MCwgNg0KLVsgXSBTIC0gMTM4NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzg3LCAxDQotWyBdIFMgLSAxMzg4LCAxDQotWzIwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMzg5LCAyDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzOTEsIDENCi1bDQotICAgICAgICBdIFMgLSAxMzkyLCAxMA0KLVtyaWNobmVzc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDAyLCA4DQotWyBdIFMgLSAxNDEwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MTEsIDENCi1bIF0gUyAtIDE0MTIsIDENCi1bOTBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE0MTMsIDINCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTQxNSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE0MTYsIDEwDQotW2N1ZS1iZWZvcmVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQyNiwgMTANCi1bIF0gUyAtIDE0MzYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQzNywgMQ0KLVsgXSBTIC0gMTQzOCwgMQ0KLVt1cmwoInBpbmcuYXUiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMTQzOSwgMTQNCi1bDQotICAgIF0gUyAtIDE0NTMsIDYNCi1bfV0gUkJSQUNFIC0gMTQ1OSwgMQ0KLVsNCi0gICAgXSBTIC0gMTQ2MCwgNg0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDY2LCAxDQotWy5oZWlkaV0gU0VMRUNUT1JfQ0xBU1MgLSAxNDY3LCA2DQotWyBdIFMgLSAxNDczLCAxDQotW3tdIExCUkFDRSAtIDE0NzQsIDENCi1bDQotICAgICAgICBdIFMgLSAxNDc1LCAxMA0KLVthemltdXRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0ODUsIDcNCi1bIF0gUyAtIDE0OTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQ5MywgMQ0KLVsgXSBTIC0gMTQ5NCwgMQ0KLVtjZW50ZXItbGVmdF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNDk1LCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTA2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTUwNywgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MTcsIDkNCi1bIF0gUyAtIDE1MjYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUyNywgMQ0KLVsgXSBTIC0gMTUyOCwgMQ0KLVsxMi4zZGVnXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTI5LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MzYsIDENCi1bDQotICAgICAgICBdIFMgLSAxNTM3LCAxMA0KLVtwYXVzZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTQ3LCA1DQotWyBdIFMgLSAxNTUyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NTMsIDENCi1bIF0gUyAtIDE1NTQsIDENCi1bMzBtc10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTU1NSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTU1OSwgMQ0KLVsxLjZzXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTYwLCA0DQotWw0KLSAgICBdIFMgLSAxNTY0LCA2DQotW31dIFJCUkFDRSAtIDE1NzAsIDENCi1bDQotICAgIF0gUyAtIDE1NzEsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU3NywgMQ0KLVsucGV0ZXJdIFNFTEVDVE9SX0NMQVNTIC0gMTU3OCwgNg0KLVsgXSBTIC0gMTU4NCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTg1LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTU4NiwgMTANCi1bYXppbXV0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTk2LCA3DQotWyBdIFMgLSAxNjAzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MDQsIDENCi1bIF0gUyAtIDE2MDUsIDENCi1bcmlnaHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYwNiwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjExLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTYxMiwgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2MjIsIDkNCi1bIF0gUyAtIDE2MzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYzMiwgMQ0KLVsgXSBTIC0gMTYzMywgMQ0KLVstMC4zNnJhZF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTYzNCwgOA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjQyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTY0MywgMTANCi1bcGl0Y2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY1MywgNQ0KLVsgXSBTIC0gMTY1OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU5LCAxDQotWyBdIFMgLSAxNjYwLCAxDQotWzIxMEh6XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNjYxLCA1DQotWw0KLSAgICBdIFMgLSAxNjY2LCA2DQotW31dIFJCUkFDRSAtIDE2NzIsIDENCi1bDQotICAgIF0gUyAtIDE2NzMsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTY3OSwgMQ0KLVsuZ29hdF0gU0VMRUNUT1JfQ0xBU1MgLSAxNjgwLCA1DQotWyBdIFMgLSAxNjg1LCAxDQotW3tdIExCUkFDRSAtIDE2ODYsIDENCi1bDQotICAgICAgICBdIFMgLSAxNjg3LCAxMA0KLVt2b2x1bWVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY5NywgNg0KLVsgXSBTIC0gMTcwMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzA0LCAxDQotWyBdIFMgLSAxNzA1LCAxDQotW3gtc29mdF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzA2LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE3MTIsIDENCi1bDQotICAgICAgICBdIFMgLSAxNzEzLCAxMA0KLVtlbGV2YXRpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcyMywgOQ0KLVsgXSBTIC0gMTczMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzMzLCAxDQotWyBdIFMgLSAxNzM0LCAxDQotWzY2Z3JhZF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczNSwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNzQxLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTc0MiwgMTANCi1bcGl0Y2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTc1MiwgNQ0KLVsgXSBTIC0gMTc1NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzU4LCAxDQotWyBdIFMgLSAxNzU5LCAxDQotWzAuMTdrSHpdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3NjAsIDcNCi1bDQotICAgIF0gUyAtIDE3NjcsIDYNCi1bfV0gUkJSQUNFIC0gMTc3MywgMQ0KLVsNCi1dIFMgLSAxNzc0LCAyDQotW31dIFJCUkFDRSAtIDE3NzYsIDENCi1bDQotDQotXSBTIC0gMTc3NywgNA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwOC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwOC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZGJmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDguY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDAsIDEKLVsubmV3V2luZG93XSBTRUxFQ1RPUl9DTEFTUyAtIDEsIDEwCi1bIF0gUyAtIDExLCAxCi1bLyogKi9dIENPTU1FTlQgLSAxMiwgNQotWyBdIFMgLSAxNywgMQotW3tdIExCUkFDRSAtIDE4LCAxCi1bCi0gICAgXSBTIC0gMTksIDYKLVtiYWNrZ3JvdW5kLWltYWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI1LCAxNgotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQxLCAxCi1bIF0gUyAtIDQyLCAxCi1bdXJsKC4uL2ltYWdlcy90ZXN0LnBuZyldIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDQzLCAyMwotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2NiwgMQotWyFpbXBvcnRhbnRdIENTU19ERUNMQVJBVElPTl9WQUxVRV9JTVBPUlRBTlQgLSA2NywgMTAKLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA3NywgMQotWwotXSBTIC0gNzgsIDIKLVt9XSBSQlJBQ0UgLSA4MCwgMQotWwotXSBTIC0gODEsIDIKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjODk4MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotSDEgew0KLQ0KLQljb2xvcjogd2hpdGUNCi0JOw0KLQ0KLQliYWNrZ3JvdW5kLWNvbG9yIDogYmxhY2sNCi0JDQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTRjNGRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1AaW1wb3J0IHVybCgiaG9nZS5jc3MiKTsNCi1AaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKTsNCi1AaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLzsNCi1ASU1QT1JUICdob2dlLmNzcycgLG1lZGlhMSxtZWRpYTIsLG1lZGlhMyBtZWRpYTQsbWVkaWE1IEBpbXBvcnQgbWVkaWE2Ow0KLQ0KLTwhLS0gLyogaG9nZWhvZ2UgKi8NCi0NCi0tLT4NCi0NCi0vKiBjb21tZW50IDIgKi8NCi1rdXNvDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1N2NjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUBpbXBvcnQgdXJsKCIuLi9zYW1wbGUyLmNzcyIpOw0KLQ0KLS8qIFNhbXBsZSBTdHlsZXMgKi8NCi0NCi1CT0RZIHsNCi0JY29sb3IgOiBibGFjazsNCi0JYmFja2dyb3VuZC1jb2xvciA6IHJnYigxODEsIDI1MywgMjExKTsNCi0JdGV4dC1hbGlnbiA6IGNlbnRlcjsNCi0JZm9udC1mYW1pbHkgOiAiSGVpc2VpIE1pbmNobyBXMyIsIHNlcmlmDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHsgbWFyZ2luLWxlZnQgOiA0Y20gfQ0KLQ0KLUBtZWRpYSBhdXJhbCB7DQotCVAuaGVpZGkgew0KLQkJYXppbXV0aCA6IGNlbnRlci1sZWZ0Ow0KLQkJZWxldmF0aW9uIDogMTIuM2RlZzsNCi0JCXBhdXNlIDogMzBtcyAxLjZzDQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZGU0ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsNCi0NCi1AaW1wb3J0IHVybCgiaG9nZS5jc3MiKTsNCi1AaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKTsNCi1AaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLzsNCi1ASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMzsNCi0NCi1AbWVkaWEgcHJpbnQgew0KLQ0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7DQotDQotfQ0KLQ0KLWgxLCBoMiwgaDMgeyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgIH0NCi1oMSBlbSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWRpdiBwICpbaHJlZl0geyAgY29sb3I6IGJsdWUgIH0NCi1ib2R5ID4gUCB7ICBsaW5lLWhlaWdodDogMS4zICB9DQotZGl2IG9sPmxpIHAgeyB9DQotbWF0aCArIHAgeyAgdGV4dC1pbmRlbnQ6IDAgIH0NCi1oMS5vcGVuZXIgKyBoMiB7ICBtYXJnaW4tdG9wOiAtNW1tICB9DQotaDFbdGl0bGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5bY2xhc3M9ZXhhbXBsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltoZWxsbz0iQ2xldmVsYW5kIl1bZ29vZGJ5ZT0iQ29sdW1idXMiXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1hW3JlbH49ImNvcHlyaWdodCJdIHsgIGNvbG9yOiBibHVlICB9DQotYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLSpbbGFuZz1mcl0geyAgZGlzcGxheSA6IG5vbmUgIH0NCi0qW2xhbmd8PSJlbiJdIHsgIGNvbG9yIDogcmVkICB9DQotRElBTE9HVUVbY2hhcmFjdGVyPXJvbWVvXQ0KLXsgIHZvaWNlLWZhbWlseTogIkxhd3JlbmNlIE9saXZpZXIiLCBjaGFybGVzLCBtYWxlICB9DQotRElBTE9HVUVbIGNoYXJhY3RlciA9IGp1bGlldCBdDQoteyAgdm9pY2UtZmFtaWx5OiAiVml2aWVuIExlaWdoIiwgdmljdG9yaWEsIGZlbWFsZSAgfQ0KLSoucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLUgxLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLXAucGFzdG9yYWwubWFyaW5lIHsgIGNvbG9yOiBncmVlbiAgfQ0KLWgxI2NoYXB0ZXIxIHsgIHRleHQtYWxpZ246IGNlbnRlciAgfQ0KLWRpdiA+IHA6Zmlyc3QtY2hpbGQgeyAgdGV4dC1pbmRlbnQ6IDAgIH0NCi1wOmZpcnN0LWNoaWxkIGVtIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLSogPiBhOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYS5leHRlcm5hbDp2aXNpdGVkIHsgIGNvbG9yOiBibHVlICB9DQotYTpmb2N1czpob3ZlciB7ICBiYWNrZ3JvdW5kOiB3aGl0ZSAgfQ0KLWh0bWw6bGFuZyhmcikgeyAgcXVvdGVzOiAnPDwnICc+PicgIH0NCi1odG1sOmxhbmcoZGUpIHsgIHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJyAgfQ0KLTpsYW5nKGZyKSA+IFEgeyAgcXVvdGVzOiAnPDwnICc+PicgIH0NCi06bGFuZyhkZSkgPiBRIHsgIHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJyAgfQ0KLXA6Zmlyc3QtbGV0dGVyIHsgIGZvbnQtc2l6ZTogM2VtOyBmb250LXdlaWdodDogbm9ybWFsICB9DQotcC5zcGVjaWFsOmJlZm9yZSB7IGNvbnRlbnQ6ICJTcGVjaWFsISAiIH0NCi1wLnNwZWNpYWw6Zmlyc3QtbGV0dGVyIHsgY29sb3I6ICNmZmQ4MDAgfQ0KLUJPRFkgeyBmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmIH0NCi0qOmxhbmcoamEtanApIHsgZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmIH0NCi0qOmxhbmcoemgtdHcpIHsgZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYgfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRlNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7DQotDQotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTM7DQotDQotQG1lZGlhIHByaW50IHsNCi0NCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQ0KLX0NCi0NCi1oMSwgaDIsIGgzIHsgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmICB9DQotaDEgZW0geyAgY29sb3I6IGJsdWUgIH0NCi1kaXYgcCAqW2hyZWZdIHsgIGNvbG9yOiBibHVlICB9DQotYm9keSA+IFAgeyAgbGluZS1oZWlnaHQ6IDEuMyAgfQ0KLWRpdiBvbD5saSBwIHsgfQ0KLW1hdGggKyBwIHsgIHRleHQtaW5kZW50OiAwICB9DQotaDEub3BlbmVyICsgaDIgeyAgbWFyZ2luLXRvcDogLTVtbSAgfQ0KLWgxW3RpdGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2NsYXNzPWV4YW1wbGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0geyAgY29sb3I6IGJsdWU7ICB9DQotYVtyZWx+PSJjb3B5cmlnaHQiXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0geyAgY29sb3I6IGJsdWUgIH0NCi0qW2xhbmc9ZnJdIHsgIGRpc3BsYXkgOiBub25lICB9DQotKltsYW5nfD0iZW4iXSB7ICBjb2xvciA6IHJlZCAgfQ0KLURJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi17ICB2b2ljZS1mYW1pbHk6ICJMYXdyZW5jZSBPbGl2aWVyIiwgY2hhcmxlcywgbWFsZSAgfQ0KLURJQUxPR1VFWyBjaGFyYWN0ZXIgPSBqdWxpZXQgXQ0KLXsgIHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUgIH0NCi0qLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1IMS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1wLnBhc3RvcmFsLm1hcmluZSB7ICBjb2xvcjogZ3JlZW4gIH0NCi1oMSNjaGFwdGVyMSB7ICB0ZXh0LWFsaWduOiBjZW50ZXIgIH0NCi1kaXYgPiBwOmZpcnN0LWNoaWxkIHsgIHRleHQtaW5kZW50OiAwICB9DQotcDpmaXJzdC1jaGlsZCBlbSB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi0qID4gYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWEuZXh0ZXJuYWw6dmlzaXRlZCB7ICBjb2xvcjogYmx1ZSAgfQ0KLWE6Zm9jdXM6aG92ZXIgeyAgYmFja2dyb3VuZDogd2hpdGUgIH0NCi1odG1sOmxhbmcoZnIpIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotaHRtbDpsYW5nKGRlKSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi06bGFuZyhmcikgPiBRIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotOmxhbmcoZGUpID4gUSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi1wOmZpcnN0LWxldHRlciB7ICBmb250LXNpemU6IDNlbTsgZm9udC13ZWlnaHQ6IG5vcm1hbCAgfQ0KLXAuc3BlY2lhbDpiZWZvcmUgeyBjb250ZW50OiAiU3BlY2lhbCEgIiB9DQotcC5zcGVjaWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiAjZmZkODAwIH0NCi1CT0RZIHsgZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZiB9DQotKjpsYW5nKGphLWpwKSB7IGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZiB9DQotKjpsYW5nKHpoLXR3KSB7IGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3M2NlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotZGVjbGFyYXRpb24gew0KLQlkaW1lbnNpb24gOiAxMDBleDsNCi0JZnVuY3Rpb24gOiByZWN0KDEwMCwgMjAwLCAzMDAsIDQwMCksIGZvcm1hdCgiaW50ZWxsaWZvbnQiKSwgbG9jYWwoIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCIpOw0KLQloYXNoIDogI2FhYmJjYzsNCi0JaWRlbnQgOiBhbnk7DQotCW51bWJlciA6IDk5OTk5Ow0KLQlwZXJjZW50YWdlIDogMTAwJTsNCi0Jc3RyaW5nIDogInN0cmluZyI7DQotCXVuaWNvZGUtcmFuZ2UgOiBVKz8/LCBVKzEwMC0yMjAsIFUrND8/Ow0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQzNDcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOw0KLQ0KLUBpbXBvcnQgdXJsKCIuLi9zYW1wbGUyLmNzcyIpIHByb2plY3Rpb24sIHR2Ow0KLQ0KLUJPRFkgew0KLSAgICBjb2xvciA6IGJsYWNrOw0KLSAgICB0ZXh0LWFsaWduIDogY2VudGVyOw0KLSAgICBiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKCAxODEsIDI1MywgMjExICkNCi19DQotDQotVUwgew0KLSAgICBjb2xvciA6IGJsYWNrOw0KLSAgICBsaXN0LXN0eWxlLWltYWdlIDogdXJsKCJpbWFnZXMvbF9hMDEuZ2lmIik7DQotICAgIGxpc3Qtc3R5bGUtcG9zaXRpb24gOiBvdXRzaWRlDQotfQ0KLQ0KLUgxIHsNCi0gICAgY29sb3IgOiB3aGl0ZTsNCi0gICAgdGV4dC1hbGlnbiA6IGNlbnRlcjsNCi0gICAgYm9yZGVyLWxlZnQtY29sb3IgOiAjOTk2NjY2Ow0KLSAgICBwYWRkaW5nLXRvcCA6IDBweDsNCi0gICAgcGFkZGluZy1yaWdodCA6IDFjbTsNCi0gICAgcGFkZGluZy1ib3R0b20gOiAyOw0KLSAgICBwYWRkaW5nLWxlZnQgOiAzZW07DQotICAgIGJvcmRlci1zdHlsZSA6IHNvbGlkOw0KLSAgICBib3JkZXItdG9wLXdpZHRoIDogNC41ZXg7DQotICAgIGJvcmRlci1yaWdodC13aWR0aCA6IDVpbjsNCi0gICAgYm9yZGVyLWJvdHRvbS13aWR0aCA6IDYuMDJtbTsNCi0gICAgYm9yZGVyLWxlZnQtd2lkdGggOiA3DQotfQ0KLQ0KLUgxOmJlZm9yZSB7DQotICAgIGNvbnRlbnQgOiAiQ2hhcHRlciAiIGNvdW50ZXIoIGNoYXB0ZXIgKSAiLiAiOw0KLSAgICBjb3VudGVyLWluY3JlbWVudCA6IGNoYXB0ZXI7DQotICAgIGNvdW50ZXItcmVzZXQgOiBzZWN0aW9uDQotfQ0KLQ0KLUlNRzpiZWZvcmUge2NvbnRlbnQgOiBhdHRyKGFsdCl9DQotDQotRElWLnNhbXBsZSB7DQotICAgIGZvbnQtZmFtaWx5IDogIlJvYnNvbiBDZWx0aWMiLCBzYW5zLXNlcmlmOw0KLSAgICBwb3NpdGlvbiA6IGFic29sdXRlOw0KLSAgICBsZWZ0IDogODMzLjVwYzsNCi0gICAgdG9wIDogOTAlOw0KLSAgICB3aWR0aCA6IDEwMHB0Ow0KLSAgICBoZWlnaHQgOiAxMTAuNzc3cHg7DQotICAgIGNsaXAgOiByZWN0KCAtNXB4LCA4MHB4LCAxMzBweCwgMHB4ICkNCi19DQotDQotQGZvbnQtZmFjZSB7DQotICAgIGZvbnQtZmFtaWx5IDogIlN3aXNzIDcyMSI7DQotICAgIHNyYyA6IHVybCgic3dpc3M3MjF0LnBmciIpIGZvcm1hdCgiaW50ZWxsaWZvbnQiKSwgbG9jYWwoIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCIpOw0KLSAgICB1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PzsNCi0gICAgZm9udC13ZWlnaHQgOiAxMDAsIDIwMCwgMzAwLCA0MDAsIDUwMA0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7bWFyZ2luLWxlZnQgOiA0Y219DQotDQotQG1lZGlhIGF1cmFsIHsNCi0gICAgSDEsIEgyLCBIMywgSDQsIEg1LCBINiB7DQotICAgICAgICB2b2ljZS1mYW1pbHkgOiBwYXVsLCBjaGlsZDsNCi0gICAgICAgIHN0cmVzcyA6IDIwOw0KLSAgICAgICAgcmljaG5lc3MgOiA5MDsNCi0gICAgICAgIGN1ZS1iZWZvcmUgOiB1cmwoInBpbmcuYXUiKQ0KLSAgICB9DQotICAgIFAuaGVpZGkgew0KLSAgICAgICAgYXppbXV0aCA6IGNlbnRlci1sZWZ0Ow0KLSAgICAgICAgZWxldmF0aW9uIDogMTIuM2RlZzsNCi0gICAgICAgIHBhdXNlIDogMzBtcyAxLjZzDQotICAgIH0NCi0gICAgUC5wZXRlciB7DQotICAgICAgICBhemltdXRoIDogcmlnaHQ7DQotICAgICAgICBlbGV2YXRpb24gOiAtMC4zNnJhZDsNCi0gICAgICAgIHBpdGNoIDogMjEwSHoNCi0gICAgfQ0KLSAgICBQLmdvYXQgew0KLSAgICAgICAgdm9sdW1lIDogeC1zb2Z0Ow0KLSAgICAgICAgZWxldmF0aW9uIDogNjZncmFkOw0KLSAgICAgICAgcGl0Y2ggOiAwLjE3a0h6DQotICAgIH0NCi19DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA4LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMTlhN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotYS5uZXdXaW5kb3cgLyogKi8gewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvdGVzdC5wbmcpICFpbXBvcnRhbnQ7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZjZiZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb21tb25FT0wgPSAiXHJcbiI7Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIpOyAvLyROT04tTkxTLTEkCi0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8vIHB1YmxpYyBzdGF0aWMgUmVhZGVyIGNyZWF0ZVJlYWRlcihGaWxlIGZpbGUpIHRocm93cwotCS8vIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JLy8gcmV0dXJuIG5ldyBGaWxlUmVhZGVyKGZpbGUpOwotCS8vIH0KLQkvLwkKLQkvLyBwdWJsaWMgc3RhdGljIFJlYWRlciBjcmVhdGVSZWFkZXIoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKQotCS8vIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JLy8gRmlsZSBmaWxlID0gY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKTsKLQkvLyByZXR1cm4gY3JlYXRlUmVhZGVyKGZpbGUpOwotCS8vIH0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVN0cmluZyhTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKTsKLQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZpbGVSZWFkZXIpOwotCQlTdHJpbmcgbGluZTsKLQkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWJ1Zi5hcHBlbmQobGluZSk7Ci0JCQlidWYuYXBwZW5kKGNvbW1vbkVPTCk7Ci0JCX0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCQkvLyByZXR1cm4gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcKLQkJLy8gRmlsZUlucHV0U3RyZWFtKGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSkpKS5yZWFkVVRGKCk7Ci0JfQotCi0Jc3RhdGljIGludCB1bmlxdWVOdW0gPSAwOwotCi0JcHVibGljIHN0YXRpYyBJQ1NTTW9kZWwgY3JlYXRlTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCi0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdCIgKyB1bmlxdWVOdW0rKyArICIuY3NzIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YgcGxhZm9ybSBvciBwcmVmZXJlbmNlIHNldHRpbmdzCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKGNvbW1vbkVPTCk7Ci0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gKElDU1NNb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcFN0cmluZyhTdHJpbmcgc3RyaW5nLCBTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JCVdyaXRlciB3cml0ZXIgPSBuZXcgRmlsZVdyaXRlcihmaWxlKTsKLQkJd3JpdGVyLndyaXRlKHN0cmluZyk7Ci0JCXdyaXRlci5jbG9zZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9OdWxsSW5wdXRTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvTnVsbElucHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZWU5ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9OdWxsSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiMzcyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotcHVibGljIGNsYXNzIFN0cmluZ0NvbXBhcmVVdGlsIHsKLQotCXB1YmxpYyBib29sZWFuIGVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoU3RyaW5nIHN0cmluZzEsIFN0cmluZyBzdHJpbmcyKSB7Ci0KLQkJaWYgKHN0cmluZzEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKHN0cmluZzIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmdSZWFkZXIgczFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzEpOwotCQlTdHJpbmdSZWFkZXIgczJSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzIpOwotCi0JCS8vIGFzc3VtZSB0cnVlIHVubGVzcyBmaW5kIGV2aWRlbmNlIHRvIHRoZSBjb250cmFyeQotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWludCBzMUNoYXIgPSAtMTsKLQkJaW50IHMyQ2hhciA9IC0xOwotCQlkbyB7Ci0KLQkJCXMxQ2hhciA9IGdldE5leHRDaGFyKHMxUmVhZGVyKTsKLQotCQkJczJDaGFyID0gZ2V0TmV4dENoYXIoczJSZWFkZXIpOwotCi0JCQlpZiAoczFDaGFyICE9IHMyQ2hhcikgewotCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlIChzMUNoYXIgIT0gLTEgJiYgczJDaGFyICE9IC0xKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCBnZXROZXh0Q2hhci4KLQkgKiBAcGFyYW0gczFSZWFkZXIKLQkgKiBAcmV0dXJuIGNoYXIKLQkgKi8KLQlwcml2YXRlIGludCBnZXROZXh0Q2hhcihTdHJpbmdSZWFkZXIgcmVhZGVyKSB7Ci0JCWludCBuZXh0Q2hhciA9IC0xOwotCQl0cnkgewotCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJd2hpbGUgKGlzRU9MKG5leHRDaGFyKSkgewotCQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbmV4dENoYXI7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRU9MKGludCBhQ2hhcikgewotCQlyZXR1cm4gKGFDaGFyID09ICdcbicgfHwgYUNoYXIgPT0gJ1xyJyk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUzYTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLkNTU0NvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlYTZmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdEltcG9ydHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ZGNjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0LW1vZHVsZXMgaWQ9Im1vZHVsZUNvcmVJZCIgcHJvamVjdC12ZXJzaW9uPSIxLjUuMCI+Ci0gICAgPHdiLW1vZHVsZSBkZXBsb3ktbmFtZT0idGVzdEltcG9ydHMiPgotICAgICAgICA8d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii8iIHNvdXJjZS1wYXRoPSIvV2ViQ29udGVudCIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0idGVzdEltcG9ydHMiLz4KLSAgICA8L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Y3N2ZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxmaXhlZCBmYWNldD0id3N0LndlYiIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJ3c3Qud2ViIiB2ZXJzaW9uPSIxLjAiLz4KLTwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2Jhc2UuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2Jhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNThlM2FiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9iYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2NvbnRlbnQgewotICB3aWR0aDogNzUwcHg7Ci0gIG1hcmdpbjogMCBhdXRvOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2N5Y2xlMC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNWNhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2N5Y2xlMC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLUBpbXBvcnQgdXJsKCJjeWNsZTEuY3NzIik7DQotI2N5Y2xlMCB7DQotICBjb2xvcjogcmVkOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvY3ljbGUxLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzBlNTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1AaW1wb3J0IHVybCgiY3ljbGUyLmNzcyIpOw0KLSNjeWNsZTEgew0KLSAgY29sb3I6IGJsdWU7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2N5Y2xlMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjVlZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2N5Y2xlMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLUBpbXBvcnQgdXJsKCJjeWNsZTAuY3NzIik7DQotI2N5Y2xlMiB7DQotICBjb2xvcjogYmxhY2s7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9pbXBvcnRETkUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2ltcG9ydERORS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMWQzZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2ltcG9ydERORS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AaW1wb3J0IHVybCgidGhpc2ZpbGVkb2VzbnRleGlzdC5jc3MiKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvaW1wb3J0TWV0aG9kcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvaW1wb3J0TWV0aG9kcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkM2Y5MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2ltcG9ydE1ldGhvZHMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1AaW1wb3J0IHVybCgiYmFzZS5jc3MiKTsNCi1AaW1wb3J0IHVybChiYXNlLmNzcyk7DQotQGltcG9ydCAiYmFzZS5jc3MiOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9zaXRlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9zaXRlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdiMmVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc2l0ZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1AaW1wb3J0IHVybCgiYmFzZS5jc3MiKTsKLQotYSB7Ci0gIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgY29sb3I6IGJsdWU7Ci19Ci0KLWE6aG92ZXIgewotICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc3R5bGUvc3ViLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9zdHlsZS9zdWIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTRjOTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9zdHlsZS9zdWIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGltcG9ydCB1cmwoIi4uL2Jhc2UuY3NzIik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDcxZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWNzc2VuY29kaW5ndGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzU4ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5YTg4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogY3NzZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNjllNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gY3NzZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gY3NzZW5jb2Rpbmd0ZXN0cy5qYXIKLXNvdXJjZS5jc3NlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jc3NlbmNvZGluZ3Rlc3RzLmphciA9IGJpbi8KLSAgICAgICAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQzNDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBDU1MgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwZDU0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NFbmNvZGluZ1Rlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLlRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUzsKLQotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde0NTU0VuY29kaW5nVGVzdGVyLmNsYXNzLCBDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU0VuY29kaW5nVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKHRoZUNsYXNzLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTc5OWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRBbGxUZXN0RmlsZXMoU3RyaW5nIHRvcERpck5hbWUpIHsKLQkJTGlzdCByZXN1bHQgPSBudWxsOwotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgdG9wRGlyTmFtZTsKLQkJRmlsZSB0b3BEaXIgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCWlmICghdG9wRGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odG9wRGlyTmFtZSArICIgaXMgbm90IGEgZGlyZWN0b3J5Iik7Ci0JCX0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NFbmNvZGluZ1Rlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRlNDhjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NFbmNvZGluZ1Rlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImNzcy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIHBsdWdpbkxvY2F0aW9uID0KLQkvLyBUZXN0c1BsdWdpbi5nZXRJbnN0YWxsTG9jYXRpb24oKS50b1N0cmluZygpOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCi0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCi0JCQlpZiAoZW5jb2RpbmdNZW1lbnRvICE9IG51bGwpIHsKLQkJCQlmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nID09IGZvdW5kSUFOQUVuY29kaW5nOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpCi0JCQkvLyBpZgotCQkJLy8gdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCWlmIChmb3VuZElBTkFFbmNvZGluZyAhPSBudWxsKSB7Ci0JCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVtcHR5RmlsZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBudWxsLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJFVUMtSlAiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9qaXMuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy0yMDIyLUpQIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIG51bGwsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS02IiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoaWZ0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiU0hJRlRfSklTIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZMRSIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmVNYWxmb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZU1hbGZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjAzMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbjsKLQotcHVibGljIGNsYXNzIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZjaGFyc2V0OwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiY3NzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgewotCQl0cnkgewotCQkJZG9UZXN0RmlsZShDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpLCBleHBlY3RlZE5hbWUsIGZpbmFsVG9rZW5UeXBlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyJcIiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoUmVhZGVyIGZpbGVSZWFkZXIsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ1NTSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQl0b2tlbml6ZXIgPSBuZXcgQ1NTSGVhZFRva2VuaXplcihmaWxlUmVhZGVyKTsKLQotCQlIZWFkUGFyc2VyVG9rZW4gcmVzdWx0VG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBwYXJzZUhlYWRlcih0b2tlbml6ZXIpOwotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSB0aGlzLmZjaGFyc2V0OwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFRva2VuID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZSkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gbnVsbCkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoQ1NTSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJaWYoY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKHRva2VuVHlwZSkpIHsKLQotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBDU1NIZWFkVG9rZW5pemVyQ29uc3RhbnRzLkNIQVJTRVRfUlVMRSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQl0aGlzLmZjaGFyc2V0ID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbShTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGODNCeXRlQk9NKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mY2hhcnNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZCRSB8fCB0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJY2FuSGFuZGxlQXNVbmljb2RlID0gdHJ1ZTsKLQkJCXRoaXMuZmNoYXJzZXQgPSAiVVRGLTE2IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBjYW5IYW5kbGVBc1VuaWNvZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbXB0eUZpbGUuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgX3Rlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfZXVjanAuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIkVVQy1KUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTIwMjItSlAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgX3Rlc3RTaGlmdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiU0hJRlRfSklTIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmUuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkJFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmVNYWxmb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkJFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCS8qCi0JCXN1bi5pby5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbgotCQlhdCBzdW4uaW8uQnl0ZVRvQ2hhclVURjguY29udmVydChCeXRlVG9DaGFyVVRGOC5qYXZhOjI2MikKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmNvbnZlcnRJbnRvKFN0cmVhbURlY29kZXIuamF2YTozMTQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2RlciRDb252ZXJ0ZXJTRC5pbXBsUmVhZChTdHJlYW1EZWNvZGVyLmphdmE6MzY0KQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIucmVhZChTdHJlYW1EZWNvZGVyLmphdmE6MjUwKQotCQlhdCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyLnJlYWQoSW5wdXRTdHJlYW1SZWFkZXIuamF2YToyMTIpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NIZWFkVG9rZW5pemVyLnl5X2FkdmFuY2UoQ1NTSGVhZFRva2VuaXplci5qYXZhOjMzNykKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXIucHJpbUdldE5leHRUb2tlbihDU1NIZWFkVG9rZW5pemVyLmphdmE6NDcwKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplci5nZXROZXh0VG9rZW4oQ1NTSGVhZFRva2VuaXplci5qYXZhOjIyOSkKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3Rlci5wYXJzZUhlYWRlcihDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6ODgpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuZG9UZXN0RmlsZShDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6NTIpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuZG9UZXN0RmlsZShDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MzEpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXIudGVzdFVURjE2Qk9NKENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YToxODYpCi0JKi8KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvKlN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNkJPTS5jc3MiOwotCQlaaXBwZWRUZXN0IHRlc3QgPSBuZXcgWmlwcGVkVGVzdCgpOwotCQl0ZXN0LnNldFVwKCk7Ci0JCUlGaWxlIGZpbGUgPSB0ZXN0LmdldEZpbGUoZmlsZW5hbWUpOwotCQlhc3NlcnROb3ROdWxsKGZpbGUpOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGZpbGUuZ2V0TG9jYXRpb25VUkkoKS5nZXRQYXRoKCkpOwotCQlkb1Rlc3RGaWxlKGZpbGVSZWFkZXIsICJVVEYtMTYiLCBudWxsKTsKLQkJdGVzdC5zaHV0RG93bigpOyovCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0VuY29kaW5nUGFyc2VyQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MTQ0YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzIHsKLQotCWZpbmFsIFN0cmluZyBFT0YgPSAiRU9GIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBJbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlID0gIkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIEludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUgPSAiSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgTUFYX0NIQVJTX1JFQUNIRUQgPSAiTUFYX0NIQVJTX1JFQUNIRUQiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIFN0cmluZ1ZhbHVlID0gInN0cnZhbCI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSA9ICJVbkRlbGltaXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgVVRGMTZCRSA9ICJVVEYxNkJFIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgVVRGMTZMRSA9ICJVVEYxNkxFIjsgLy8kTk9OLU5MUy0xJAotCi0KLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjgzQnl0ZUJPTSA9ICJVVEY4M0J5dGVCT00iOyAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNWQxNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUyBleHRlbmRzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbiB7Ci0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcyIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlTWFsZm9ybWVkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGVNYWxmb3JtZWQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ2NTMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjU2ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiRVVDLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAio82j0yCj0KW0pbelw6WvIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NDc2OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy0yMDIyLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAiGyRCI00jUxsoQiAbJEIjUCU0JTclQyUvGyhCIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyOWNkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIlNISUZUX0pJUyI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIoJsgnIggm+DU4NWg2KDTiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmMDZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1CT0RZIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCAiTVMgU2FucyBTZXJpZiI7DQotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQotfQ0KLQ0KLVREIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1USCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotSDEgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTRwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGNlbnRlcg0KLX0NCi0NCi1IMiB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcg0KLX0NCi0NCi1IMyB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IGl0YWxpYyAgDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzk5N2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhNGU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4YTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0NCi0NCi0gICAgQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE1MWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YzA1ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODUyN2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5NGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGQ2NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNjIxZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzXzEuMC4wLmphcgotY3NzdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCi1QZXJmb3JtYW5jZVJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDFkMTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYmE3YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5DU1NVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jc3MudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLmlkZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc3VpdGVzdHMuamFyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDFhODg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjc3N1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbAotamFycy5jb21waWxlLm9yZGVyID0gY3NzdWl0ZXN0cy5qYXIKLXNvdXJjZS5jc3N1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jc3N1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODEyYThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBDU1MgVUkgVGVzdHMgUGx1Zy1pbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzFiNGQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPHByb3Zpc2lvbmFsQ29uZmlndXJhdGlvbgotCQkJdHlwZT0ic291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciIgdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIuQ1NTQ29kZUZvbGRpbmdUZXN0Ii8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxNGUzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5jb250ZW50YXNzaXN0LlRlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyLkNTU0NvZGVGb2xkaW5nVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKLQotcHVibGljIGNsYXNzIENTU1VJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJDU1MgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcywgIkNTUyBVSSBFeGlzdGVuY2UgVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCQlhZGRUZXN0KENTU0NvZGVGb2xkaW5nVGVzdC5zdWl0ZSgpKTsKLQkJYWRkVGVzdChUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5zdWl0ZSgpKTsKLQl9Ci19CQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjBmMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NVSVRlc3RzUGx1Z2luKCkgewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuCi0JICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotCSAqCi0JICogQHBhcmFtIHBhdGggdGhlIHBhdGgKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXJldHVybiBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMiLCBwYXRoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTMxMjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLkNTU1VJUGx1Z2luOwotCi0vKioKLSAqIAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiB0ZXN0cyBpZiBDU1NVSVBsdWdpbiBjYW4gYmUgbG9hZGVkCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4aXN0cygpIHsKLQkJUGx1Z2luIHAgPSBDU1NVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGxvYWQgQ1NTIFVJIHBsdWdpbiIsIHApOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1NWZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgewotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBDU1NVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBDU1NVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShlbnRyeW5hbWUpOwotCQlpZiAoZW50cnkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOwotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJaW50IGkgPSAtMTsKLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7Ci0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQl9Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOwotCQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQkJaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHJvb3RFbnRyeSAtIGF2b2lkIHRyYWlsaW5nIHNlcGFyYXRvcnMKLQkgKiBAcGFyYW0gZnVsbFRhcmdldFBhdGgKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgewotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVudHJ5bmFtZQotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBURVNUIHBsdWdpbiBzdGFydGluZyB3LyBhICIvIiAoZWcuCi0JICogICAgICAgICAgICAiL3Rlc3RmaWxlcy9idWdudW1iZXIvc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHBhcmFtIGZ1bGxQYXRoCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIGp1bml0IHRlc3Qgd29ya3BhY2UgKGVnLgotCSAqICAgICAgICAgICAgIi9teXJ1bnRpbWVwcm9qL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIGVudHJ5bmFtZSwgZmluYWwgU3RyaW5nIGZ1bGxQYXRoKSB7Ci0JCWZpbmFsIElGaWxlIGZpbGVbXSA9IG5ldyBJRmlsZVsxXTsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmaWxlWzBdID0gX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnluYW1lLCBmdWxsUGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YWQ0YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqIC8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRleHQuSUNTU1BhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5jb250ZW50b3V0bGluZS5DU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5wcm9wZXJ0aWVzLkNTU1Byb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBjc3MgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgby5nZXRDbGFzcygpLCBDU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgQ1NTUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElDU1NQYXJ0aXRpb25zLlNUWUxFKTsKLQkJYXNzZXJ0TnVsbCgidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJQ1NTUGFydGl0aW9ucy5TVFlMRSwgbyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwZWQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycyI7Ci0JCi0JLyoqIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVwZW5kIG9uIEpTRFQgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9TQ1JJUFRfTkFUVVJFX0lEID0gIm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuanNOYXR1cmUiOwotCQotCS8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0IjsKLQkKLQkvKiogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWxyZWFkeSBvcGVuIGVkaXRvcnMgc28gdGhhdCB0aGUgdGVzdHMgZG9uJ3QgZ28gdGhyb3VnaAotCSAqIHRoZSB0cm91YmxlIG9mIG9wZW5pbmcgdGhlIHNhbWUgZWRpdG9ycyBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTWFwIGZGaWxlVG9FZGl0b3JNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzKCkgewotCQlzdXBlcigiVGVzdCBDU1MgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5jbGFzcywgIlRlc3QgQ1NTIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCQlyZXR1cm4gbmV3IFRlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAodHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3JQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEwMSwgMCwgMTAxLCAxMDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmNzcyIsIDIsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuY3NzIiwgNSwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblZhbHVlUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMSwgMCwgMTEsIDExfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5jc3MiLCA5LCAxNiwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eURvYygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTAzLCAxLCAxMDIsIDEwM307Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDIuY3NzIiwgMCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hTZWxlY3RvclByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MjAsIDAsIDIwLCAyMH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuY3NzIiwgMiwgMSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuY3NzIiwgMywgMTQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoRGVjbGFyYXRpb25WYWx1ZVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuY3NzIiwgNywgMjMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5SdW4gYSBwcm9wb3NhbCB0ZXN0IGJ5IG9wZW5pbmcgdGhlIGdpdmVuIGZpbGUgYW5kIGludm9raW5nIGNvbnRlbnQgYXNzaXN0IGZvcgotCSAqIGVhY2ggZXhwZWN0ZWQgcHJvcG9zYWwgY291bnQgYXQgdGhlIGdpdmVuIGxpbmUgbnVtYmVyIGFuZCBsaW5lIGNoYXJhY3RlcgotCSAqIG9mZnNldCBhbmQgdGhlbiBjb21wYXJlIHRoZSBudW1iZXIgb2YgcHJvcG9zYWxzIGZvciBlYWNoIGludm9jYXRpb24gKHBhZ2VzKSB0byB0aGUKLQkgKiBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZU5hbWUKLQkgKiBAcGFyYW0gbGluZU51bQotCSAqIEBwYXJhbSBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0Ci0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcnVuUHJvcG9zYWxUZXN0KFN0cmluZyBmaWxlTmFtZSwKLQkJCWludCBsaW5lTnVtLCBpbnQgbGluZVJlbGF0aXZlQ2hhck9mZnNldCwKLQkJCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpIHRocm93cyBFeGNlcHRpb257Ci0JCQotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCWludCBvZmZzZXQgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXRMaW5lT2Zmc2V0KGxpbmVOdW0pICsgbGluZVJlbGF0aXZlQ2hhck9mZnNldDsKLQotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IGdldFByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cy5sZW5ndGgpOwotCQkKLQkJdmVyaWZ5UHJvcG9zYWxDb3VudHMocGFnZXMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5JbnZva2UgY29udGVudCBhc3Npc3Qgb24gdGhlIGdpdmVuIHZpZXdlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBwYWdlcwotCSAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdHMgb2YgZWFjaCBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHBhcmFtIHBhZ2VDb3VudAotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIGdldFByb3Bvc2FscyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIGludCBvZmZzZXQsIGludCBwYWdlQ291bnQpIHRocm93cyBFeGNlcHRpb24gewotCQkvL3NldHVwIHRoZSB2aWV3ZXIKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTKCk7Ci0JCUNvbnRlbnRBc3Npc3RhbnQgY29udGVudEFzc2lzdGFudCA9IChDb250ZW50QXNzaXN0YW50KWNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEFzc2lzdGFudCh2aWV3ZXIpOwotCQl2aWV3ZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24pOwotCQl2aWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShvZmZzZXQsIDApOwotCQkKLQkJLy9nZXQgdGhlIHByb2Nlc3NvcgotCQlTdHJpbmcgcGFydGl0aW9uVHlwZUlEID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFydGl0aW9uKG9mZnNldCkuZ2V0VHlwZSgpOwotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBjb250ZW50QXNzaXN0YW50LmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3IocGFydGl0aW9uVHlwZUlEKTsKLQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBhYm91dCB0byBzdGFydAotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZCA9IENvbnRlbnRBc3Npc3RhbnQuY2xhc3MuCi0JCSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uQmVnaW5FdmVudCIsIG5ldyBDbGFzc1tdIHtib29sZWFuLmNsYXNzfSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbmV3IE9iamVjdFtdIHtCb29sZWFuLlRSVUV9KTsKLQotCQkvL2dldCBjb250ZW50IGFzc2lzdCBzdWdnZXN0aW9ucwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW3BhZ2VDb3VudF1bXTsKLQkJZm9yKGludCBwID0gMDsgcCA8IHBhZ2VDb3VudDsgKytwKSB7Ci0JCQlwYWdlc1twXSA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCX0KLQkJCi0JCS8vZmlyZSBjb250ZW50IGFzc2lzdCBzZXNzaW9uIGVuZGluZwotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotICAgICAgICBnZXREZWNsYXJlZE1ldGhvZCgiZmlyZVNlc3Npb25FbmRFdmVudCIsIG51bGwpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbnVsbCk7Ci0JCQotCQlyZXR1cm4gcGFnZXM7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbXBhcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMgcGVyIHBhZ2UgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgcHJvcG9zYWxzCi0JICogcGVyIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHBhZ2VzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeVByb3Bvc2FsQ291bnRzKElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzLCBpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB7Ci0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yKGludCBwYWdlID0gMDsgcGFnZSA8IGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoOyArK3BhZ2UpIHsKLQkJCWlmKGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0gIT0gcGFnZXNbcGFnZV0ubGVuZ3RoKSB7Ci0JCQkJZXJyb3IuYXBwZW5kKCJcblByb3Bvc2FsIHBhZ2UgIiArIHBhZ2UgKyAiIGRpZCBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fsczogd2FzICIgKwotCQkJCQkJcGFnZXNbcGFnZV0ubGVuZ3RoICsgIiBleHBlY3RlZCAiICsgZXhwZWN0ZWRQcm9wb3NhbENvdW50c1twYWdlXSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8vaWYgZXJyb3JzIHJlcG9ydCB0aGVtCi0JCWlmKGVycm9yLmxlbmd0aCgpID4gMCkgewotCQkJQXNzZXJ0LmZhaWwoZXJyb3IudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSBmaWxlIG5hbWUgaW4gPGNvZGU+ZlByb2plY3Q8L2NvZGU+IGF0dGVtcHRzIHRvIGdldCBhbiA8Y29kZT5JRmlsZTwvY29kZT4KLQkgKiBmb3IgaXQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgdGhlIHRlc3QgZmFpbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPklGaWxlPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIDxjb2RlPm5hbWU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZ2V0RmlsZShTdHJpbmcgbmFtZSkgewotCQlJRmlsZSBmaWxlID0gZlByb2plY3QuZ2V0RmlsZShuYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyBmaWxlICsgIiBjYW4gbm90IGJlIGZvdW5kIiwgZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSA8Y29kZT5maWxlPC9jb2RlPiBnZXQgYW4gZWRpdG9yIGZvciBpdC4gSWYgYW4gZWRpdG9yIGhhcyBhbHJlYWR5Ci0JICogYmVlbiByZXRyaWV2ZWQgZm9yIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPiB0aGVuIHJldHVybiB0aGUgc2FtZSBhbHJlYWR5Ci0JICogb3BlbiBlZGl0b3IuPC9wPgotCSAqIAotCSAqIDxwPldoZW4gb3BlbmluZyB0aGUgZWRpdG9yIGl0IHdpbGwgYWxzbyBzdGFuZGFyZGl6ZWQgdGhlIGxpbmUKLQkgKiBlbmRpbmdzIHRvIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBvcGVuIGFuZCByZXR1cm4gYW4gZWRpdG9yIGZvciB0aGlzCi0JICogQHJldHVybiA8Y29kZT5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjwvY29kZT4gb3BlbmVkIGZyb20gdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RydWN0dXJlZFRleHRFZGl0b3IgZ2V0RWRpdG9yKElGaWxlIGZpbGUpICB7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilmRmlsZVRvRWRpdG9yTWFwLmdldChmaWxlKTsKLQkJCi0JCWlmKGVkaXRvciA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQkJaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCWVkaXRvciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpZWRpdG9yUGFydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIpOwotCQkJCX0KLQkJCQkKLQkJCQlpZihlZGl0b3IgIT0gbnVsbCkgewotCQkJCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGVkaXRvcik7Ci0JCQkJCWZGaWxlVG9FZGl0b3JNYXAucHV0KGZpbGUsIGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlICsgIiBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBlZGl0b3I7Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHN0YW5kYXJkaXplTGluZUVuZGluZ3MoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpLmdldERvY3VtZW50KCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvYy5nZXQoKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcciIsICJcbiIpOwotCQlkb2Muc2V0KGNvbnRlbnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciAocmVzcGVjdGl2ZWx5KSBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL3NldHVwIHByb3BlcnRpZXMKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBub25pbnRlcmFjdGl2ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JCQkKLQkJCS8vc2V0dXAgcHJvamVjdAotCQkJZlByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmV3IFN0cmluZ1tdIHtKQVZBX1NDUklQVF9OQVRVUkVfSUR9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9jbG9zZSBvdXQgdGhlIGVkaXRvcnMKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBmRmlsZVRvRWRpdG9yTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShpdGVyLmhhc05leHQoKSkgewotCQkJCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilpdGVyLm5leHQoKTsKLQkJCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCWVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCS8vcmVtb3ZlIHByb2plY3QKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQkJLy9yZXN0b3JlIHByb3BlcnRpZXMKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9DU1NDb2RlRm9sZGluZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL0NTU0NvZGVGb2xkaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmE0MGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL0NTU0NvZGVGb2xkaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvbkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcjsKLQotLyoqCi0gKiA8cD5UZXN0cyB0aGF0IGNvZGUgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgY29ycmVjdGx5IGFkZGVkL3JlbW92ZWQgZnJvbSBDU1MgRG9jdW1lbnRzPC9wPgotICogPHA+QWxsIG9mIHRoZXNlIHRlc3RzIHVzZSB0aGUgc2FtZSBwcm9qZWN0IGFuZCB3aGVuIHBvc3NpYmxlIHRoZSBzYW1lIG9wZW4gZG9jdW1lbnRzPC9wPgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIFhNTCBDb2RlIEZvbGRpbmcgVGVzdAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5DU1NDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gQ1NTIENvZGUgRm9sZGluZyBUZXN0Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLkRURENvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBEVEQgQ29kZSBGb2xkaW5nIFRlc3QKLSAqLwotcHVibGljIGNsYXNzIENTU0NvZGVGb2xkaW5nVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgewotCS8qKiBtYXggYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfVElNRSA9IDQwMDA7Ci0JCi0JLyoqIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRSA9IDIwMDsKLQkKLQkvKioKLQkgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiQ1NTQ29kZUZvbGRpbmdUZXN0IjsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9mb2xkaW5nIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmUHJvamVjdDsKLQkKLQkvKioKLQkgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFscmVhZHkgb3BlbiBlZGl0b3JzIHNvIHRoYXQgdGhlIHRlc3RzIGRvbid0IGdvIHRocm91Z2gKLQkgKiB0aGUgdHJvdWJsZSBvZiBvcGVuaW5nIHRoZSBzYW1lIGVkaXRvcnMgb3ZlciBhbmQgb3ZlciBhZ2FpbgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgTWFwIGZGaWxlVG9FZGl0b3JNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQotCS8qKiB0aGUgbGFzdCB7QGxpbmsgSURvY3VtZW50fSB0byBiZSByZWNvbmNpbGVkICovCi0JcHJpdmF0ZSBzdGF0aWMgSURvY3VtZW50IGZSZWNvbmNpbGVkRG9jID0gbnVsbDsKLQkKLQkvKioKLQkgKiA8cD5EZWZhdWx0IGNvbnN0cnVjdG9yPHA+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBDU1NDb2RlRm9sZGluZ1Rlc3QoKSB7Ci0JCXN1cGVyKCJDU1MgQ29kZSBGb2xkaW5nIFRlc3QiKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIENTU0NvZGVGb2xkaW5nVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShDU1NDb2RlRm9sZGluZ1Rlc3QuY2xhc3MsICJDU1MgQ29kZSBGb2xkaW5nIFRlc3QiKTsKLQkJcmV0dXJuIG5ldyBDU1NDb2RlRm9sZGluZ1Rlc3RTZXR1cCh0cyk7Ci0KLQl9Ci0JCi0JLyoqCi0JICogUmVzZXQgdGhlIHN0YXRlIGJldHdlZW4gdGVzdHMKLQkgKiAKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJCi0JCWZSZWNvbmNpbGVkRG9jID0gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRoZSBpbml0aWFsbHkgcGxhY2VkIGZvbGRpbmcgYW5ub3RhdGlvbnM8L3A+Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEluaXRGb2xkaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJDU1NGb2xkaW5nVGVzdDEuY3NzIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig0MDEsIDEyMCkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDMzMywgNjIpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxODEsIDcyKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjU4LCA2OSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDIxLCAxMTMpKTsKLQkJCi0JCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGVkaXRvci5nZXRUZXh0Vmlld2VyKCksIGV4cGVjdGVkUG9zaXRpb25zKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRoYXQgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgdXBkYXRlZCBhZnRlciBub2RlIGlzIHJlbW92ZWQ8L3A+Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZU5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiQ1NTRm9sZGluZ1Rlc3QxLmNzcyIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJZG9jLnJlcGxhY2UoMjUzLCA3NiwgIiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzI1LCAxMjApKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjEsIDExMykpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxODEsIDcyKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDI1NywgNjIpKTsKLQkJCQotCQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkodmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gY2F0Y2goQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiVGVzdCBpcyBicm9rZW4sIHJlcGxhY2UgbG9jYXRpb24gaGFzIGJlY29tZSBpbnZhbGlkLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBmb2xkaW5nIGFubm90YXRpb25zIGFyZSB1cGRhdGVkIGFmdGVyIG5vZGUgaXMgYWRkZWQ8L3A+Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEFkZE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIkNTU0ZvbGRpbmdUZXN0Mi5jc3MiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQl0cnkgewotCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJCUlEb2N1bWVudCBkb2MgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCWRvYy5yZXBsYWNlKDI1NSwgMCwgIlxudGQge1xuYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG59XG4iKTsKLQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkKLQkJCUxpc3QgZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDI5MSwgNjkpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjU2LCAzMSkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigyMSwgMTEzKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQzNCwgMTIwKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE4MSwgNzIpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzY2LCA2MikpOwotCQkJCi0JCQl3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeSh2aWV3ZXIsIGV4cGVjdGVkUG9zaXRpb25zKTsKLQkJfSBjYXRjaChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJUZXN0IGlzIGJyb2tlbiwgYWRkIGxvY2F0aW9uIGhhcyBiZWNvbWUgaW52YWxpZC5cbiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSBmaWxlIG5hbWUgaW4gPGNvZGU+ZlByb2plY3Q8L2NvZGU+IGF0dGVtcHRzIHRvIGdldCBhbiA8Y29kZT5JRmlsZTwvY29kZT4KLQkgKiBmb3IgaXQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgdGhlIHRlc3QgZmFpbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPklGaWxlPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIDxjb2RlPm5hbWU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZ2V0RmlsZShTdHJpbmcgbmFtZSkgewotCQlJRmlsZSBmaWxlID0gZlByb2plY3QuZ2V0RmlsZShuYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyBmaWxlICsgIiBjYW4gbm90IGJlIGZvdW5kIiwgZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSA8Y29kZT5maWxlPC9jb2RlPiBnZXQgYW4gZWRpdG9yIGZvciBpdC4gSWYgYW4gZWRpdG9yIGhhcyBhbHJlYWR5Ci0JICogYmVlbiByZXRyaWV2ZWQgZm9yIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPiB0aGVuIHJldHVybiB0aGUgc2FtZSBhbHJlYWR5Ci0JICogb3BlbiBlZGl0b3IuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSAgewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpZkZpbGVUb0VkaXRvck1hcC5nZXQoZmlsZSk7Ci0JCQotCQlpZihlZGl0b3IgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUsIHRydWUpOwotCQkJCWlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQllZGl0b3IgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWVkaXRvclBhcnQpOwotCQkJCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIpOwotCQkJCX0KLQkJCQkKLQkJCQlpZihlZGl0b3IgIT0gbnVsbCkgewotCQkJCQlmRmlsZVRvRWRpdG9yTWFwLnB1dChmaWxlLCBlZGl0b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIHZpZXdlciBmb3IgIiArIGZpbGUpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSArICIgZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQkKLQkvKioKLQkgKiBXYWl0cyBmb3IgdGhlIGRpcnR5IHJlZ2lvbiByZWNvbmNpbGVyIHRvIGZpbmlzaCBhbmQgdGhlbiB2ZXJpZmllcyB0aGF0IG9ubHkgYW5kIGFsbAotCSAqIG9mIHRoZSA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4gaGF2ZSBmb2xkaW5nIGFubm90YXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlciBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlIGdpdmVuIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPgotCSAqIGluIGhlcmUgYWZ0ZXIgdGhlIGRpcnR5IHJlZ2lvbiByZWNvbmNpbGVyIGpvYiBoYXMgZmluaXNoZWQKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQb3NpdGlvbnMgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZXNlIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqIGFmdGVyIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciBqb2IgaGFzIGZpbmlzaGVkCi0JICovCi0JcHJpdmF0ZSB2b2lkIHdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGZpbmFsIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQlpbnQgdGltZSA9IDA7Ci0JCXdoaWxlKGRvYyAhPSBmUmVjb25jaWxlZERvYyAmJiB0aW1lIDw9IE1BWF9XQUlUX1RJTUUpIHsKLQkJCVRocmVhZC5zbGVlcChXQUlUX1RJTUUpOwotCQkJdGltZSArPSBXQUlUX1RJTUU7Ci0JCX0KLQkJCi0JCWlmKGRvYyA9PSBmUmVjb25jaWxlZERvYykgewotCQkJdmVyaWZ5QW5ub3RhdGlvblBvc2l0aW9ucyh2aWV3ZXIsIGV4cGVjdGVkUG9zaXRpb25zKTsKLQkJfSBlbHNlIHsKLQkJCUFzc2VydC5mYWlsKCJEb2N1bWVudCAiICsgdmlld2VyLmdldERvY3VtZW50KCkgKyAiIHdhcyBub3QgcmVjb25jaWxlZCB3aXRoIGluICIgKyBNQVhfV0FJVF9USU1FICsKLQkJCQkJIiBzbyBnYXZlIHVwIHdhaXRpbmcgYW5kIGluIHR1cm4gY291bGQgbm90IHZhbGlkYXRlIGZvbGRpbmcgYW5vdGF0aW9ucyIpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgb25seSBhbmQgYWxsIG9mIHRoZSA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4gaGF2ZSBmb2xkaW5nIGFubm90YXRpb25zCi0JICogaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGUgZ2l2ZW4gPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGluIGhlcmUgCi0JICogQHBhcmFtIGV4cGVjdGVkUG9zaXRpb25zIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGVzZSBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdmVyaWZ5QW5ub3RhdGlvblBvc2l0aW9ucyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIExpc3QgZXhwZWN0ZWRQb3NpdGlvbnMpIHRocm93cyBFeGNlcHRpb257Ci0JCVByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWwgcHJvamVjdGlvbk1vZGVsID0gdmlld2VyLmdldFByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWwoKTsKLQkJSXRlcmF0b3IgYW5ub3RhdGlvbkl0ZXIgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQotCQkvL2V2ZW4gd2l0aCB0aGUgd2FpdGluZyBmb3IgdGhlIGpvYiBzb21ldGltZXMgdGhlIHRlc3QgaXMganVzdCB0byBmYXN0Ci0JCWludCBhdHRlbXB0cyA9IDA7Ci0JCXdoaWxlKCFhbm5vdGF0aW9uSXRlci5oYXNOZXh0KCkgJiYgYXR0ZW1wdHMgPCAzKSB7Ci0JCQkrK2F0dGVtcHRzOwotCQkJYW5ub3RhdGlvbkl0ZXIgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwKTsKLQkJfQotCQkKLQkJTGlzdCB1bmV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJd2hpbGUoYW5ub3RhdGlvbkl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qgb2JqID0gYW5ub3RhdGlvbkl0ZXIubmV4dCgpOwotCQkJaWYob2JqIGluc3RhbmNlb2YgUHJvamVjdGlvbkFubm90YXRpb24pIHsKLQkJCQlQcm9qZWN0aW9uQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gKFByb2plY3Rpb25Bbm5vdGF0aW9uKW9iajsKLQkJCQlQb3NpdGlvbiBwb3MgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0UG9zaXRpb24oYW5ub3RhdGlvbik7Ci0JCQkJCi0JCQkJYm9vbGVhbiBmb3VuZCA9IGV4cGVjdGVkUG9zaXRpb25zLnJlbW92ZShwb3MpOwotCQkJCWlmKCFmb3VuZCkgewotCQkJCQl1bmV4cGVjdGVkUG9zaXRpb25zLmFkZChwb3MpOwotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGVycm9yID0gIiI7Ci0JCWlmKHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICArPSAiVGhlcmUgd2VyZSAiICsgdW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgKyAiIHVuZXhwZWN0ZWQgcG9zaXRpb25zIHRoYXQgd2VyZSBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgdW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCk7ICsraSkgewotCQkJCWVycm9yICs9ICJcblx0IiArIHVuZXhwZWN0ZWRQb3NpdGlvbnMuZ2V0KGkpOwotCQkJfQotCQl9Ci0JCQotCQlpZihleHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgIT0gMCApIHsKLQkJCWVycm9yICs9ICJcblRoZXJlIHdlcmUgIiArIGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSArICIgZXhwZWN0ZWQgcG9zaXRpb25zIHRoYXQgd2VyZSBub3QgZm91bmQiOwotCQkJZm9yKGludCBpID0gMDsgaSA8IGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0JCQkJZXJyb3IgKz0gIlxuXHQiICsgZXhwZWN0ZWRQb3NpdGlvbnMuZ2V0KGkpOwotCQkJfQotCQl9Ci0JCQotCQlpZihlcnJvci5sZW5ndGgoKSAhPSAwKSB7Ci0JCQlmYWlsKGVycm9yKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5MaW5lIGVuZGluZ3MgY2FuIGJlIGFuIGlzc3VlIHdoZW4gcnVubmluZyB0ZXN0cyBvbiBkaWZmZXJlbnQgT1NzLgotCSAqIFRoaXMgZnVuY3Rpb24gc3RhbmRhcmRpemVzIHRoZSBsaW5lIGVuZGluZ3MgdG8gdXNlIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiA8cD5JdCB3aWxsIGdldCB0aGUgdGV4dCBmcm9tIHRoZSBnaXZlbiBlZGl0b3IsIGNoYW5nZSB0aGUgbGluZSBlbmRpbmdzLAotCSAqIGFuZCB0aGVuIHNhdmUgdGhlIGVkaXRvcjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZWRpdG9yIHN0YW5kYXJkaXplIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIHRleHQgcHJlc2VudGVkIGluIHRoaXMKLQkgKiBlZGl0b3IuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0YW5kYXJkaXplTGluZUVuZGluZ3MoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpLmdldERvY3VtZW50KCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvYy5nZXQoKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcciIsICJcbiIpOwotCQlkb2Muc2V0KGNvbnRlbnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciAocmVzcGVjdGl2ZWx5KSBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ1NTQ29kZUZvbGRpbmdUZXN0U2V0dXAgZXh0ZW5kcyBUZXN0U2V0dXAgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JCXByaXZhdGUgc3RhdGljIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBDU1NDb2RlRm9sZGluZ1Rlc3RTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQlpbml0aWFsaXplUmVzb3VyY2VzKCk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJCi0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQkJCi0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBTZXQgdXAgdGhlIHByb2plY3QgYW5kIHdvcmtiZW5jaCwgdGhpcyBzaG91bGQgb25seSBiZSBkb25lIG9uY2UKLQkJICovCi0JCXByaXZhdGUgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVJlc291cmNlcygpIHsKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogaWdub3JlCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciNhYm91dFRvQmVSZWNvbmNpbGVkKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkvL2lnbm9yZQotCX0KLQotCS8qKgotCSAqIGtlZXAgdHJhY2sgb2YgbGFzdCBkb2N1bWVudCByZWNvbmNpbGVkCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciNyZWNvbmNpbGVkKG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50LCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsLCBib29sZWFuLCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWNvbmNpbGVkKElEb2N1bWVudCBkb2N1bWVudCwgSUFubm90YXRpb25Nb2RlbCBtb2RlbCwKLQkJCWJvb2xlYW4gZm9yY2VkLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQlmUmVjb25jaWxlZERvYyA9IGRvY3VtZW50OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RDU1NDb250ZW50QXNzaXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Q1NTQ29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjk5MDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RDU1NDb250ZW50QXNzaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DU1NDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdENTU0NvbnRlbnRBc3Npc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHByb2plY3ROYW1lID0gbnVsbDsKLQlwcm90ZWN0ZWQgU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKLQlwcm90ZWN0ZWQgU3RyaW5nIHJlc291cmNlc0ZvbGRlciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWw7Ci0JcHJvdGVjdGVkIElGaWxlIGZpbGUgPSBudWxsOwotCi0JcHVibGljIFRlc3RDU1NDb250ZW50QXNzaXN0KCkgewotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJcHJvamVjdE5hbWUgPSAiQ1NTQ29udGVudEFzc2lzdEZvck1lZGlhIjsKLQkJZmlsZU5hbWUgPSAibWVkaWFleGFtcGxlLmNzcyI7Ci0JCXJlc291cmNlc0ZvbGRlciA9ICIvdGVzdHJlc291cmNlcyI7Ci0KLQkJU3RyaW5nIGZpbGVQYXRoID0gc2V0dXBQcm9qZWN0KCk7Ci0JCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoCi0JCQkJbmV3IFBhdGgoZmlsZVBhdGgpKTsKLQotCQlpZiAoZmlsZSAhPSBudWxsICYmICFmaWxlLmV4aXN0cygpKSB7Ci0JCQlBc3NlcnQuZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSAiICsgZmlsZSArICIuIik7Ci0JCX0KLQotCQlsb2FkRmlsZSgpOwotCi0JCWluaXRpYWxpemVTb3VyY2VWaWV3ZXIoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpIHsKLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9IGVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlzb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0LmZhaWwoIlVuYWJsZSB0byBydW4gdGhlIHRlc3QgYXMgYSBkaXNwbGF5IG11c3QgYmUgYXZhaWxhYmxlLiIpOwotCQl9Ci0KLQkJY29uZmlndXJlU291cmNlVmlld2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU291cmNlVmlld2VyKCkgewotCQlzb3VyY2VWaWV3ZXIuY29uZmlndXJlKG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MoKSk7Ci0KLQkJc291cmNlVmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBsb2FkRmlsZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCWRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBzZXR1cFByb2plY3QoKSB0aHJvd3MgRXhjZXB0aW9uewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0TmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCi0JCX0KLQkJU3RyaW5nIGZpbGVQYXRoID0gcHJvamVjdC5nZXRGdWxsUGF0aCgpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkuYXBwZW5kKGZpbGVOYW1lKS50b1N0cmluZygpOwotCi0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyZXNvdXJjZXNGb2xkZXIsIHByb2plY3QuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLQotCQlyZXR1cm4gZmlsZVBhdGg7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudEFzc2lzdEluc2lkZU1lZGlhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJdHJ5IHsKLQkJCUNTU0NvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IENTU0NvbnRlbnRBc3Npc3RQcm9jZXNzb3IoKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wb3NhbHMgPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMoc291cmNlVmlld2VyLCAyNCk7Ci0JCQlhc3NlcnRUcnVlKCJObyBwcm9wb3NhbHMgYXQgb2Zmc2V0LiIsIHByb3Bvc2Fscy5sZW5ndGggPiAwKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbMF07Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIHByb3Bvc2FsIHJldHVybmVkIGZvciBBQ1JPTllNLiIsICJhemltdXRoIiwgcHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpKTsgCi0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTBmMmQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRleHQuSUNTU1BhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJQ1NTUGFydGl0aW9ucy5TVFlMRSk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZW50UHJlZml4ZXMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmIChwcmVmaXhlcyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGluZGVudCBwcmVmaXhlcyIsIGZhbHNlKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9DcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGlzIG51bGwiLCBpbmZvQ3JlYXRvcik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmIChwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBub3QgbnVsbCIsIHIpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGhvdmVyUGFydGl0aW9ucyA9IG5ldyBTdHJpbmdbXXtJQ1NTUGFydGl0aW9ucy5TVFlMRX07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dEhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRUZXh0SG92ZXIoZlZpZXdlciwgaG92ZXJQYXJ0aXRpb25zW2ldLCBTV1QuTk9ORSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJob3ZlciB3YXMgbnVsbCBmb3IgcGFydGl0aW9uOiAiICsgaG92ZXJQYXJ0aXRpb25zW2ldLCBob3Zlcik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1Mjc0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLkNTU1VJVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4OTBhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1AQ0hBUlNFVCAiSVNPLTg4NTktMSI7DQotDQotDQotDQotLmJhciB7DQotCQ0KLX0NCi0NCi0uZm9vIHsNCi0JYm9yZGVyLXN0eWxlOiANCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QyLmNzcworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0My5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0My5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MWNlOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AQ0hBUlNFVCAiSVNPLTg4NTktMSI7DQotDQotdCB7DQotCQ0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmODljMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1AQ0hBUlNFVCAiSVNPLTg4NTktMSI7DQotDQotdGFibGUgew0KLQlib3JkZXItYm90dG9tDQotfQ0KLQ0KLXRkIHsNCi0JYm9yZGVyLWJvdHRvbS1zdHlsZTogZA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvQ1NTRm9sZGluZ1Rlc3QxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3MDYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogZ2xvYmFsIChiZWdpbikgKi8NCi1ib2R5IHsNCi0gICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7DQotICAgIGNvbG9yOiAjMDAwOw0KLSAgICBiYWNrZ3JvdW5kOiAjZmZmIHVybCgiZ2xvYmFsL2JvZHktYmFjay5naWYiKSByZXBlYXQteDsNCi19DQotDQotLyogZ2xvYmFsIChlbmQpICovDQotDQotLyogaGVhZGVyIChiZWdpbikgKi8NCi0gICAgI2hlYWRlciB7DQotICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07DQotICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnB4Ow0KLSAgICB9DQotICAgICNoZWFkZXIgZm9ybSB7DQotICAgICAgICBmb250LXNpemU6IDg1JTsNCi0gICAgICAgIGRpc3BsYXk6IGlubGluZTsNCi0gICAgfQ0KLQ0KLSAgICAjaGVhZGVyIC5idG4sDQotICAgICNoZWFkZXIgLnR4dCB7DQotICAgICAgICBmb250LXNpemU6IDgwJTsNCi0gICAgfQ0KLQ0KLSAgICAubWVzc2FnZSB7DQotICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7DQotICAgICAgICBtYXJnaW46IDAuM2VtIDBlbTsNCi0gICAgICAgIHBhZGRpbmc6IDAuM2VtOw0KLSAgICAgICAgY29sb3I6IGdyZWVuOw0KLSAgICB9DQotDQotLyogaGVhZGVyIChlbmQpICAgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvQ1NTRm9sZGluZ1Rlc3QyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3MDYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogZ2xvYmFsIChiZWdpbikgKi8NCi1ib2R5IHsNCi0gICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7DQotICAgIGNvbG9yOiAjMDAwOw0KLSAgICBiYWNrZ3JvdW5kOiAjZmZmIHVybCgiZ2xvYmFsL2JvZHktYmFjay5naWYiKSByZXBlYXQteDsNCi19DQotDQotLyogZ2xvYmFsIChlbmQpICovDQotDQotLyogaGVhZGVyIChiZWdpbikgKi8NCi0gICAgI2hlYWRlciB7DQotICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07DQotICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnB4Ow0KLSAgICB9DQotICAgICNoZWFkZXIgZm9ybSB7DQotICAgICAgICBmb250LXNpemU6IDg1JTsNCi0gICAgICAgIGRpc3BsYXk6IGlubGluZTsNCi0gICAgfQ0KLQ0KLSAgICAjaGVhZGVyIC5idG4sDQotICAgICNoZWFkZXIgLnR4dCB7DQotICAgICAgICBmb250LXNpemU6IDgwJTsNCi0gICAgfQ0KLQ0KLSAgICAubWVzc2FnZSB7DQotICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7DQotICAgICAgICBtYXJnaW46IDAuM2VtIDBlbTsNCi0gICAgICAgIHBhZGRpbmc6IDAuM2VtOw0KLSAgICAgICAgY29sb3I6IGdyZWVuOw0KLSAgICB9DQotDQotLyogaGVhZGVyIChlbmQpICAgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvbWVkaWFleGFtcGxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9tZWRpYWV4YW1wbGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWM0YjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9tZWRpYWV4YW1wbGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1ATUVESUEgewotCUFDUk9OWU0gewotCQkKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiZGMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWFiOGNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1kdGR1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLWphdmFDb21waWxlci5kdGR1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTM2NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmI3MDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAxNCAxNzo1NjoxOCBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTJjNGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGR0ZGNvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbC5EVERDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDk4NGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmR0ZGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuZHRkY29yZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGR0ZGNvcmV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTZhNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gRFREIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcmVzb3VyY2VzL2R0ZFBhcnNlclRlc3Qvc2FtcGxlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9yZXNvdXJjZXMvZHRkUGFyc2VyVGVzdC9zYW1wbGUuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmIzMDBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9yZXNvdXJjZXMvZHRkUGFyc2VyVGVzdC9zYW1wbGUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08IS0tIGxpbmUgb25lIC0tPgotPCEtLSBsaW5lIHR3byAtLT4KLTwhRUxFTUVOVCBzb21ldGhpbmcgQU5ZPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2ViNDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURENvcmVUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgRFREQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIERURENvcmVUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgQ29yZSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREUGFyc2VyVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0U3VpdGUoRFRERmlsZVRlc3QuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoRFRETW9kZWxUZXN0cy5jbGFzcyk7Ci0JfQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBEVERDb3JlVGVzdFN1aXRlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRERmlsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RUREZpbGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDUyMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRERmlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTIxNiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5EVERGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5EVEROb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5EVERNb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JEVEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIERUREZpbGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIERUREZpbGVUZXN0KCkgewotCX0KLQotCXB1YmxpYyBEVERGaWxlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRvcExldmVsTm9kZUF0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJRFRETW9kZWxJbXBsIG1vZGVsID0gKERURE1vZGVsSW1wbCltb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlTdHJpbmcgZHRkVGV4dCA9ICI8IUVMRU1FTlQgTmV3RWxlbWVudDMgKCNQQ0RBVEEpPjwhRU5USVRZICUgTmV3RW50aXR5IFNZU1RFTSBcIlwiID4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChkdGRUZXh0KTsKLQkJCi0JCW1vZGVsLnNldFN0cnVjdHVyZWREb2N1bWVudChkb2N1bWVudCk7Ci0JCURUREZpbGUgZHRkRmlsZSA9IG1vZGVsLmdldERUREZpbGUoKTsKLQkJCi0JCURURE5vZGUgZHRkTm9kZSA9IGR0ZEZpbGUuZ2V0VG9wTGV2ZWxOb2RlQXQoMzIpOwotCQlhc3NlcnROb3ROdWxsKCJOb2RlIGlzIG51bGwiLCBkdGROb2RlKTsKLQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIE5vZGUgVHlwZS4iLCAgIk5ld0VudGl0eSIsIGR0ZE5vZGUuZ2V0TmFtZSgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURE1vZGVsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURE1vZGVsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5ZTY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERNb2RlbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1MjE2IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmRvY3VtZW50LkRURE1vZGVsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIERURE1vZGVsVGVzdHMgIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdGNyZWF0ZVVubWFuYWdlZERURE1vZGVsKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlhc3NlcnRUcnVlKCJEaWQgbm90IGdldCBEVEQgTW9kZWwiLCBtb2RlbCBpbnN0YW5jZW9mIERURE1vZGVsSW1wbCApOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURFBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURFBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwNTM0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmVtZi5EVERFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5lbWYuRFRERmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuZW1mLnV0aWwuRFREVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMuaW50ZXJuYWwuRFREQ29yZVRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgRFREUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVTkVYUEVDVEVEX0ZJTEVfQ09OVEVOVFMgPSAiVW5leHBlY3RlZCBmaWxlIGNvbnRlbnRzIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUNvbW1lbnRQYXJzaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRFREVXRpbCB1dGlsID0gbmV3IERURFV0aWwoKTsKLQkJU3RyaW5nIHNhbXBsZURURHBhdGggPSAiL3Jlc291cmNlcy9kdGRQYXJzZXJUZXN0L3NhbXBsZS5kdGQiOwotCQlVUkwgYnVuZGxlVVJMID0gRFREQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShzYW1wbGVEVERwYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChzYW1wbGVEVERwYXRoICsgIiBub3QgZm91bmQgaW4gYnVuZGxlIiwgYnVuZGxlVVJMKTsKLQkJLy8gRG8gbm90IHJlbHkgb24gQ29tbW9uIFVSSSBSZXNvbHZlciB0byBmaW5kIHRoZSBjb250ZW50cwotCQlVUkwgZmlsZVVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTChidW5kbGVVUkwpOwotCQl1dGlsLnBhcnNlKGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JCURUREZpbGUgZHRkRmlsZSA9IHV0aWwuZ2V0RFRERmlsZSgpOwotCQlhc3NlcnRFcXVhbHMoVU5FWFBFQ1RFRF9GSUxFX0NPTlRFTlRTLCAxLCBkdGRGaWxlLmdldERURENvbnRlbnQoKS5zaXplKCkpOwotCQlPYmplY3Qgb2JqZWN0ID0gZHRkRmlsZS5nZXREVERDb250ZW50KCkuZ2V0KDApOwotCQlhc3NlcnRUcnVlKFVORVhQRUNURURfRklMRV9DT05URU5UUywgb2JqZWN0IGluc3RhbmNlb2YgRFRERWxlbWVudCk7Ci0JCURUREVsZW1lbnQgZHRkRWxlbWVudCA9IChEVERFbGVtZW50KSBvYmplY3Q7Ci0JCVN0cmluZyBjb21tZW50ID0gZHRkRWxlbWVudC5nZXRDb21tZW50KCk7Ci0JCWFzc2VydEVxdWFscygiQ29tbWVudCB2YWx1ZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgIiBsaW5lIG9uZSBcbiBsaW5lIHR3byAiLCBjb21tZW50KTsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvVmVyaWZ5UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9WZXJpZnlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc2YmMxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9WZXJpZnlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuRFREQ29yZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5UGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlPYmplY3QgcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IERURENvcmVQbHVnaW4uZ2V0UGx1Z2luKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIkRURCBjb3JlIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9pbnRlcm5hbC9EVERDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL2ludGVybmFsL0RURENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzk4ZTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL2ludGVybmFsL0RURENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBEVERDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JcHJpdmF0ZSBzdGF0aWMgRFREQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgRFREQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHVibGljIERURENvcmVUZXN0c1BsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gdGhpczsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwZWIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLkRURENvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPCEtLSBTb21lIG9mIHRoZSBEVEQgbW9kZWwgcmVmZXJlbmNlcyBVSSBvYmplY3RzLCBsaWtlIEltYWdlcyAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2U2MWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWI4Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1kdGR1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLWphdmFDb21waWxlci5kdGR1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2UwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzQyZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jVHVlIEFwciAyMSAxOTowMTo1MiBFRFQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0yMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjZmMzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogZHRkdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuRFREVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5kdGQudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS51aS5pZGUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMjQ2YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmR0ZHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmR0ZHVpdGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gZHRkdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkzOGFkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gRFREIFVJIFRlc3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJhMWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPHByb3Zpc2lvbmFsQ29uZmlndXJhdGlvbgotCQkJdHlwZT0ic291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciIgdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIuRFREQ29kZUZvbGRpbmdUZXN0Ii8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE3MGY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5pbnRlcm5hbC5EVERVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBEVERVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGVuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gRFREVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlhc3NlcnROb3ROdWxsKCJkdGQgcHJlZmVyZW5jZSBzdG9yZSB3YXMgbnVsbCIsIHN0b3JlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJLy9JU1NVRTogdGhpcyBkb2VzIE5PVCB1c2UgU0VUCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWFzc2VydE5vdE51bGwoImR0ZCBwcmVmZXJlbmNlIHN0b3JlIHdhcyBudWxsIiwgc3RvcmUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkZTZjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnBsdWdpbi5UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotCi0KLQotcHVibGljIGNsYXNzIERURFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRFREVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgRFREVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlVSVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5jbGFzcykpOwotCQlhZGRUZXN0U3VpdGUoVGVzdFBsdWdpblhNTFJlcXVpcmVtZW50cy5jbGFzcyk7Ci0JCS8vIFsyOTk2NDVdIERpc2FibGVkIGZvciBmYWlsaW5nIHVuaXQgdGVzdHMgb24gYnVpbGQgbWFjaGluZSAtIFByb2JsZW0gd2l0aCB0ZXN0Ci0JCS8vIGFkZFRlc3QoRFREQ29kZUZvbGRpbmdUZXN0LnN1aXRlKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk5ZjA2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsLkRURFVJVGVzdHNQbHVnaW47Ci0KLS8qKgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuUHJvamVjdFV0aWwgU2ltaWxhciBQcm9qZWN0IFV0aWxzCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuUHJvamVjdFV0aWwgU2ltaWxhciBQcm9qZWN0IFV0aWxzCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuUHJvamVjdFV0aWwgU2ltaWxhciBQcm9qZWN0IFV0aWxzCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VXRpbCB7Ci0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcm9vdEVudHJ5IC0gYXZvaWQgdHJhaWxpbmcgc2VwYXJhdG9ycwotCSAqIEBwYXJhbSBmdWxsVGFyZ2V0UGF0aAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0Jc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJRW51bWVyYXRpb24gZW50cmllcyA9IERURFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBEVERVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShlbnRyeW5hbWUpOwotCQlpZiAoZW50cnkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOwotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJaW50IGkgPSAtMTsKLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7Ci0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQl9Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOwotCQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQkJaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDA4ODNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGV4dC5JRFREUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkRURENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgZHRkIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8uZ2V0Q2xhc3MoKSwgRFREQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvY3VtZW50YXRpb25UZXh0SG92ZXIoKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET0NVTUVOVEFUSU9OVEVYVEhPVkVSLCBJRFREUGFydGl0aW9ucy5EVERfREVGQVVMVCk7Ci0JCWFzc2VydE51bGwoInVuZXhwZWN0ZWQgZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSURURFBhcnRpdGlvbnMuRFREX0RFRkFVTFQsIG8pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVmVyaWZ5VUlQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVmVyaWZ5VUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY1ZGFkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5pbnRlcm5hbC5EVERVSVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5VUlQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCVBsdWdpbiBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gRFREVUlQbHVnaW4uZ2V0RGVmYXVsdCgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJlZGl0b3IgcGx1Z2luIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBwbHVnaW4pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvRFREVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9EVERVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZWQwY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9EVERVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBEVERVSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIERURFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vIFJlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBEVERVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBEVERVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBEVERVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJdHJ5IHsKLQkJCWlmIChyZXNvdXJjZUJ1bmRsZSA9PSBudWxsKQotCQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsLlRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmQ3ODllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3BsdWdpbi9UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3BsdWdpbi9UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZDI0M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9wbHVnaW4vVGVzdFBsdWdpblhNTFJlcXVpcmVtZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmQgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNzE3ODQgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMucGx1Z2luOw0KLQ0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLm5ldC5VUkw7DQotDQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsNCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsNCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoOw0KLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhDb25zdGFudHM7DQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb247DQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEZhY3Rvcnk7DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOw0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsNCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdFBsdWdpblhNTFJlcXVpcmVtZW50cyBleHRlbmRzIFRlc3RDYXNlew0KLQ0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX1hNTCA9ICJwbHVnaW4ueG1sIjsNCi0JDQotCURvY3VtZW50IHBsdWdpbkRvYyA9IG51bGw7DQotCVhQYXRoIHhwYXRoID0gbnVsbDsNCi0NCi0JcHVibGljIFRlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMoKSB7DQotCQlzdXBlcigpOw0KLQl9DQotCQ0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KLQkJc3VwZXIuc2V0VXAoKTsNCi0JCQ0KLQkJbG9hZFBsdWdpblhNTCgpOw0KLQkJaW5pdFhQYXRoKCk7DQotCX0NCi0JDQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci50ZWFyRG93bigpOw0KLQkJcGx1Z2luRG9jID0gbnVsbDsNCi0JCXhwYXRoID0gbnVsbDsNCi0JfQ0KLQ0KLQlwcml2YXRlIHZvaWQgaW5pdFhQYXRoKCkgew0KLQkJWFBhdGhGYWN0b3J5IHhwYXRoRmFjdG9yeSA9IFhQYXRoRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KLQkJeHBhdGggPSB4cGF0aEZhY3RvcnkubmV3WFBhdGgoKTsNCi0JfQ0KLQ0KLQlwcml2YXRlIHZvaWQgbG9hZFBsdWdpblhNTCgpIHRocm93cyBFeGNlcHRpb24gew0KLQkJVVJMIHVybCA9IGdldFRlc3RGaWxlKFBMVUdJTl9YTUwpOw0KLQkJdXJsLm9wZW5TdHJlYW0oKTsNCi0JCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9tRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsNCi0JCURvY3VtZW50QnVpbGRlciBkb21CdWlsZGVyID0gZG9tRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsNCi0JCXBsdWdpbkRvYyA9IGRvbUJ1aWxkZXIucGFyc2UodXJsLm9wZW5TdHJlYW0oKSk7DQotCX0NCi0JDQotCXByb3RlY3RlZCBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKFN0cmluZyBwYXRoKSB7DQotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gRFREVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHBhdGgpOw0KLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOw0KLQkJfQ0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0JCQkvLyBpbXBvc3NpYmxlDQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOw0KLQkJfQ0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247DQotCX0NCi0NCi0JcHJvdGVjdGVkIFVSTCBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsNCi0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCIvIiArIGZpbGVwYXRoKTsNCi0JCXJldHVybiBpbnN0YWxsVVJMOw0KLQl9DQotCQ0KLQkNCi0JcHVibGljIHZvaWQgdGVzdERURFRvb2xUaXBFeGlzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0JCVN0cmluZyB4cGF0aFN0cmluZyA9ICIvL21lbnVDb250cmlidXRpb25bQGxvY2F0aW9uVVJJID0gJ3Rvb2xiYXI6b3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wZXJzcGVjdGl2ZS5OZXdGaWxlVG9vbEJhciddL2NvbW1hbmRbQGlkID0gJ29yZy5lY2xpcHNlLndzdC5kdGQudWkubmV3RFRERmlsZSddIjsNCi0JCVhQYXRoRXhwcmVzc2lvbiB4cGF0aEV4cHIgPSB4cGF0aC5jb21waWxlKHhwYXRoU3RyaW5nKTsNCi0JCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSB4cGF0aEV4cHIuZXZhbHVhdGUocGx1Z2luRG9jLmdldERvY3VtZW50RWxlbWVudCgpLCBYUGF0aENvbnN0YW50cy5OT0RFKTsNCi0JCVN0cmluZyB0b29sVGlwID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRvb2x0aXAiKTsNCi0JCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCB2YWx1ZSBmb3IgRFREIHRvb2x0aXAiLCAiJURURF9OZXdfY29udGV4dF90eXBlX0V4dGVuc2lvbl9FbGVtZW50Lm5hbWUiLCB0b29sVGlwKTsNCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9EVERDb2RlRm9sZGluZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL0RURENvZGVGb2xkaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzVjZDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL0RURENvZGVGb2xkaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvbkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcjsKLQotLyoqCi0gKiA8cD5UZXN0cyB0aGF0IGNvZGUgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgY29ycmVjdGx5IGFkZGVkL3JlbW92ZWQgZnJvbSBEVEQgRG9jdW1lbnRzPC9wPgotICogPHA+QWxsIG9mIHRoZXNlIHRlc3RzIHVzZSB0aGUgc2FtZSBwcm9qZWN0IGFuZCB3aGVuIHBvc3NpYmxlIHRoZSBzYW1lIG9wZW4gZG9jdW1lbnRzPC9wPgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIFhNTCBDb2RlIEZvbGRpbmcgVGVzdAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5DU1NDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gQ1NTIENvZGUgRm9sZGluZyBUZXN0Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLkRURENvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBEVEQgQ29kZSBGb2xkaW5nIFRlc3QKLSAqLwotcHVibGljIGNsYXNzIERURENvZGVGb2xkaW5nVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgewotCS8qKiBtYXggYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfVElNRSA9IDQwMDA7Ci0JCi0JLyoqIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRSA9IDIwMDsKLQkKLQkvKioKLQkgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiRFREQ29kZUZvbGRpbmdUZXN0IjsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9mb2xkaW5nIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqIHRoZSBsYXN0IHtAbGluayBJRG9jdW1lbnR9IHRvIGJlIHJlY29uY2lsZWQgKi8KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnQgZlJlY29uY2lsZWREb2MgPSBudWxsOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIERURENvZGVGb2xkaW5nVGVzdCgpIHsKLQkJc3VwZXIoIkRURCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgRFREQ29kZUZvbGRpbmdUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKERURENvZGVGb2xkaW5nVGVzdC5jbGFzcywgIkRURCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCQlyZXR1cm4gbmV3IERURENvZGVGb2xkaW5nVGVzdFNldHVwKHRzKTsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXNldCB0aGUgc3RhdGUgYmV0d2VlbiB0ZXN0cwotCSAqIAotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQkJZlJlY29uY2lsZWREb2MgPSBudWxsOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhlIGluaXRpYWxseSBwbGFjZWQgZm9sZGluZyBhbm5vdGF0aW9uczwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdEZvbGRpbmcoKXRocm93cyBFeGNlcHRpb24gIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIkRUREZvbGRpbmdUZXN0MS5kdGQiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQlMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyOTksIDIzNCkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAyOTYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig0OTgsIDc1MSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyNTEsIDE3KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTI2OSwgMjgpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzMzcsIDE1OSkpOwotCQkKLQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZWRpdG9yLmdldFRleHRWaWV3ZXIoKSwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBmb2xkaW5nIGFubm90YXRpb25zIGFyZSB1cGRhdGVkIGFmdGVyIG5vZGUgaXMgcmVtb3ZlZDwvcD4KLQkgKiBSZW1vdmVkIGJlY2F1c2UgaXQga2VlcHMgZmFpbGluZyBkdXJpbmcgYnVpbGRzIGJ1dCBydW5uaW5nIGxvY2FsbHkgYW5kIHNtb2tlIHRlc3RpbmcKLQkgKiBwcmVzZW50cyBubyBwcm9ibGVtcy4KLQkgKi8KLQkvKnB1YmxpYyB2b2lkIHRlc3RSZW1vdmVOb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJEVERGb2xkaW5nVGVzdDEuZHRkIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJdHJ5IHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlkb2MucmVwbGFjZSgzMzcsIDE1OSwgIiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTExMCwgMjgpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDI5NikpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxMTQwLCAyMzQpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzM5LCA3NTEpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTA5MiwgMTcpKTsKLQkJCQotCQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkodmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gY2F0Y2goQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiVGVzdCBpcyBicm9rZW4sIHJlcGxhY2UgbG9jYXRpb24gaGFzIGJlY29tZSBpbnZhbGlkLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0qLwotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0aGF0IGZvbGRpbmcgYW5ub3RhdGlvbnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbm9kZSBpcyBhZGRlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkTm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiRFRERm9sZGluZ1Rlc3QyLmR0ZCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJU3RyaW5nIG5ld05vZGVUZXh0ID0KLQkJCQkiPCFBVFRMSVNUIEJET1xuIiArCi0JCQkJIiVjb3JlYXR0cnM7XHRcdFx0XHQtLSBpZCwgY2xhc3MsIHN0eWxlLCB0aXRsZSAtLVxuIiArCi0JCQkJImxhbmdcdCVMYW5ndWFnZUNvZGU7XHQjSU1QTElFRFx0LS0gbGFuZ3VhZ2UgY29kZSAtLVxuIiArCi0JCQkJImRpclx0KGx0cnxydGwpXHQjUkVRVUlSRURcdC0tIGRpcmVjdGlvbmFsaXR5IC0tXG4iICsKLQkJCQkiPlxuIjsKLQkJCWRvYy5yZXBsYWNlKDU5NywgMCwgbmV3Tm9kZVRleHQpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQ1NCwgMjM0KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ5OCwgOTA2KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAyOTYpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQwNiwgMTcpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzM3LCAxNTkpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQyNCwgMjgpKTsKLQkJCQotCQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkodmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gY2F0Y2goQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiVGVzdCBpcyBicm9rZW4sIGFkZCBsb2NhdGlvbiBoYXMgYmVjb21lIGludmFsaWQuXG4iICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgPGNvZGU+ZmlsZTwvY29kZT4gZ2V0IGFuIGVkaXRvciBmb3IgaXQuIElmIGFuIGVkaXRvciBoYXMgYWxyZWFkeQotCSAqIGJlZW4gcmV0cmlldmVkIGZvciB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4gdGhlbiByZXR1cm4gdGhlIHNhbWUgYWxyZWFkeQotCSAqIG9wZW4gZWRpdG9yLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBvcGVuIGFuZCByZXR1cm4gYW4gZWRpdG9yIGZvciB0aGlzCi0JICogQHJldHVybiA8Y29kZT5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjwvY29kZT4gb3BlbmVkIGZyb20gdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhlZGl0b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiB2aWV3ZXIgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogV2FpdHMgZm9yIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciB0byBmaW5pc2ggYW5kIHRoZW4gdmVyaWZpZXMgdGhhdCBvbmx5IGFuZCBhbGwKLQkgKiBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucyBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZSBnaXZlbiA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4KLQkgKiBpbiBoZXJlIGFmdGVyIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciBqb2IgaGFzIGZpbmlzaGVkCi0JICogQHBhcmFtIGV4cGVjdGVkUG9zaXRpb25zIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGVzZSBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiBhZnRlciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgam9iIGhhcyBmaW5pc2hlZAotCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSB2b2lkIHdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGZpbmFsIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlEb2N1bWVudCBkb2MgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZShkb2MgIT0gZlJlY29uY2lsZWREb2MgJiYgdGltZSA8PSBNQVhfV0FJVF9USU1FKSB7Ci0JCQlUaHJlYWQuc2xlZXAoV0FJVF9USU1FKTsKLQkJCXRpbWUgKz0gV0FJVF9USU1FOwotCQl9Ci0JCQotCQlpZihkb2MgPT0gZlJlY29uY2lsZWREb2MpIHsKLQkJCXZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnModmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gZWxzZSB7Ci0JCQlBc3NlcnQuZmFpbCgiRG9jdW1lbnQgIiArIHZpZXdlci5nZXREb2N1bWVudCgpICsgIiB3YXMgbm90IHJlY29uY2lsZWQgd2l0aCBpbiAiICsgTUFYX1dBSVRfVElNRSArCi0JCQkJCSIgc28gZ2F2ZSB1cCB3YWl0aW5nIGFuZCBpbiB0dXJuIGNvdWxkIG5vdCB2YWxpZGF0ZSBmb2xkaW5nIGFub3RhdGlvbnMiKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IG9ubHkgYW5kIGFsbCBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucwotCSAqIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlciBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlIGdpdmVuIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBpbiBoZXJlIAotCSAqIEBwYXJhbSBleHBlY3RlZFBvc2l0aW9ucyBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlc2UgcG9zaXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zKSB0aHJvd3MgRXhjZXB0aW9uewotCQlQcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsIHByb2plY3Rpb25Nb2RlbCA9IHZpZXdlci5nZXRQcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsKCk7Ci0JCUl0ZXJhdG9yIGFubm90YXRpb25JdGVyID0gcHJvamVjdGlvbk1vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkKLQkJTGlzdCB1bmV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJd2hpbGUoYW5ub3RhdGlvbkl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qgb2JqID0gYW5ub3RhdGlvbkl0ZXIubmV4dCgpOwotCQkJaWYob2JqIGluc3RhbmNlb2YgUHJvamVjdGlvbkFubm90YXRpb24pIHsKLQkJCQlQcm9qZWN0aW9uQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gKFByb2plY3Rpb25Bbm5vdGF0aW9uKW9iajsKLQkJCQlQb3NpdGlvbiBwb3MgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0UG9zaXRpb24oYW5ub3RhdGlvbik7Ci0JCQkJCi0JCQkJYm9vbGVhbiBmb3VuZCA9IGV4cGVjdGVkUG9zaXRpb25zLnJlbW92ZShwb3MpOwotCQkJCWlmKCFmb3VuZCkgewotCQkJCQl1bmV4cGVjdGVkUG9zaXRpb25zLmFkZChwb3MpOwotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGVycm9yID0gIiI7Ci0JCWlmKHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICs9ICJUaGVyZSB3ZXJlICIgKyB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSArICIgdW5leHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIGZvdW5kIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0JCQkJUG9zaXRpb24gcG9zID0gKFBvc2l0aW9uKSB1bmV4cGVjdGVkUG9zaXRpb25zLmdldChpKTsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBwb3M7Ci0JCQkJZXJyb3IgKz0gIlxuKCIgKyBmUmVjb25jaWxlZERvYy5nZXQocG9zLm9mZnNldCwgcG9zLmxlbmd0aCkgKyAiKSI7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwICkgewotCQkJZXJyb3IgKz0gIlxuVGhlcmUgd2VyZSAiICsgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICsgIiBleHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBleHBlY3RlZFBvc2l0aW9ucy5nZXQoaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwIHx8IHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICs9ICJcbkZ1bGwgRG9jdW1lbnQ6XG4oIiArIGZSZWNvbmNpbGVkRG9jLmdldCgpICsiKSI7Ci0JCX0KLQkJCi0JCWlmKGVycm9yLmxlbmd0aCgpICE9IDApIHsKLQkJCWZhaWwoZXJyb3IpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBEVERDb2RlRm9sZGluZ1Rlc3RTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgRFREQ29kZUZvbGRpbmdUZXN0U2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJCi0JCQlpbml0aWFsaXplUmVzb3VyY2VzKCk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJCi0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQl9Ci0JCQotCQkvKioKLQkJICogU2V0IHVwIHRoZSBwcm9qZWN0IGFuZCB3b3JrYmVuY2gsIHRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBvbmNlCi0JCSAqLwotCQlwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRpYWxpemVSZXNvdXJjZXMoKSB7Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIGlnbm9yZQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjYWJvdXRUb0JlUmVjb25jaWxlZCgpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlUmVjb25jaWxlZCgpIHsKLQkJLy9pZ25vcmUKLQl9Ci0KLQkvKioKLQkgKiBrZWVwIHRyYWNrIG9mIGxhc3QgZG9jdW1lbnQgcmVjb25jaWxlZAotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjcmVjb25jaWxlZChvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbCwgYm9vbGVhbiwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCi0JICovCi0JcHVibGljIHZvaWQgcmVjb25jaWxlZChJRG9jdW1lbnQgZG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwgbW9kZWwsCi0JCQlib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJZlJlY29uY2lsZWREb2MgPSBkb2N1bWVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllZTg0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRleHQuSURURFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSURURFBhcnRpdGlvbnMuRFREX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzZGIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0RFRELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdERURCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0KLQkJaW50IGxlbmd0aFZhbHVlOwotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0KLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgSUNvbnRlbnRPdXRsaW5lUGFnZSBmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBIVE1MIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKHNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJCXJldHVybjsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJCXNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgZklucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9mSW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIGZTZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBmU2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRG9jdW1lbnQgZG9jID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYmY0YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5EVERVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDEuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvRFRERm9sZGluZ1Rlc3QxLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4MmM2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDEuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IUVOVElUWSAlIGVudGl0eTENCi0gImlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEICAtLSBkb2N1bWVudC13aWRlIHVuaXF1ZSBpZCAtLQ0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQgIC0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMgLS0NCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEICAtLSBhc3NvY2lhdGVkIHN0eWxlIGluZm8gLS0NCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEICAtLSBhZHZpc29yeSB0aXRsZSAtLSINCi0gID4NCi0NCi08IUVOVElUWSAlIGVudGl0eTINCi0gImxhbmcgICAgICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEICAtLSBsYW5ndWFnZSBjb2RlIC0tDQotICBkaXIgICAgICAgICAobHRyfHJ0bCkgICAgICAjSU1QTElFRCAgLS0gZGlyZWN0aW9uIGZvciB3ZWFrL25ldXRyYWwgdGV4dCAtLSINCi0gID4NCi0NCi08IUVOVElUWSAlIGVudGl0eTMNCi0gIm9uY2xpY2sgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgYnV0dG9uIHdhcyBjbGlja2VkIC0tDQotICBvbmRibGNsaWNrICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgZG91YmxlIGNsaWNrZWQtLQ0KLSAgb25tb3VzZWRvd24gJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIHByZXNzZWQgZG93biAtLQ0KLSAgb25tb3VzZXVwICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIHJlbGVhc2VkIC0tDQotICBvbm1vdXNlb3ZlciAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIHdhcyBtb3ZlZCBvbnRvIC0tDQotICBvbm1vdXNlbW92ZSAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIHdhcyBtb3ZlZCB3aXRoaW4gLS0NCi0gIG9ubW91c2VvdXQgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIGF3YXkgLS0NCi0gIG9ua2V5cHJlc3MgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQgLS0NCi0gIG9ua2V5ZG93biAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcHJlc3NlZCBkb3duIC0tDQotICBvbmtleXVwICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBrZXkgd2FzIHJlbGVhc2VkIC0tIg0KLSAgPg0KLQ0KLTwhLS0NCi1jb21tZW50MQ0KLS0tPg0KLTwhRU5USVRZICUgZW50aXR5NCAiSUdOT1JFIj4NCi0NCi08IUVOVElUWSAlIGVudGl0eTUNCi0gImRhdGFzcmMgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEICAtLSBhIHNpbmdsZSBvciB0YWJ1bGFyIERhdGEgU291cmNlIC0tDQotICBkYXRhZmxkICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRCAgLS0gdGhlIHByb3BlcnR5IG9yIGNvbHVtbiBuYW1lIC0tDQotICBkYXRhZm9ybWF0YXMgKHBsYWludGV4dHxodG1sKSBwbGFpbnRleHQgLS0gdGV4dCBvciBodG1sIC0tIg0KLSAgPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0RUREZvbGRpbmdUZXN0Mi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDgyYzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0RUREZvbGRpbmdUZXN0Mi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRU5USVRZICUgZW50aXR5MQ0KLSAiaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQgIC0tIGRvY3VtZW50LXdpZGUgdW5pcXVlIGlkIC0tDQotICBjbGFzcyAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRCAgLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3NlcyAtLQ0KLSAgc3R5bGUgICAgICAgJVN0eWxlU2hlZXQ7ICAgI0lNUExJRUQgIC0tIGFzc29jaWF0ZWQgc3R5bGUgaW5mbyAtLQ0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQgIC0tIGFkdmlzb3J5IHRpdGxlIC0tIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5Mg0KLSAibGFuZyAgICAgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQgIC0tIGxhbmd1YWdlIGNvZGUgLS0NCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNJTVBMSUVEICAtLSBkaXJlY3Rpb24gZm9yIHdlYWsvbmV1dHJhbCB0ZXh0IC0tIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5Mw0KLSAib25jbGljayAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIGNsaWNrZWQgLS0NCi0gIG9uZGJsY2xpY2sgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgYnV0dG9uIHdhcyBkb3VibGUgY2xpY2tlZC0tDQotICBvbm1vdXNlZG93biAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcHJlc3NlZCBkb3duIC0tDQotICBvbm1vdXNldXAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcmVsZWFzZWQgLS0NCi0gIG9ubW91c2VvdmVyICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIG9udG8gLS0NCi0gIG9ubW91c2Vtb3ZlICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIHdpdGhpbiAtLQ0KLSAgb25tb3VzZW91dCAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciB3YXMgbW92ZWQgYXdheSAtLQ0KLSAgb25rZXlwcmVzcyAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEga2V5IHdhcyBwcmVzc2VkIGFuZCByZWxlYXNlZCAtLQ0KLSAgb25rZXlkb3duICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEga2V5IHdhcyBwcmVzc2VkIGRvd24gLS0NCi0gIG9ua2V5dXAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcmVsZWFzZWQgLS0iDQotICA+DQotDQotPCEtLQ0KLWNvbW1lbnQxDQotLS0+DQotPCFFTlRJVFkgJSBlbnRpdHk0ICJJR05PUkUiPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5NQ0KLSAiZGF0YXNyYyAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQgIC0tIGEgc2luZ2xlIG9yIHRhYnVsYXIgRGF0YSBTb3VyY2UgLS0NCi0gIGRhdGFmbGQgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEICAtLSB0aGUgcHJvcGVydHkgb3IgY29sdW1uIG5hbWUgLS0NCi0gIGRhdGFmb3JtYXRhcyAocGxhaW50ZXh0fGh0bWwpIHBsYWludGV4dCAtLSB0ZXh0IG9yIGh0bWwgLS0iDQotICA+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTZmYmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIgLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIgotCQlwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40IiA+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy93M2MvZG9tL2Nzcy8qKi8qIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS9zdHlsZXNoZWV0cy8qKi8qIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iIC8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E3NGZlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWh0bWxjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmh0bWxjb3JldGVzdHMuamFyLmFyZ3MKLVBhcnNlclJlc3VsdHMyMDA4KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWJiMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOTU4NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNg0KLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjINCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDANCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3INCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQyOTI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMy5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxjb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkhUTUxDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5mb3JtYXQudGVzdGZpbGVzLmh0bWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuY3NzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnRleHQudGVzdGZpbGVzLmh0bWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscwotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcwotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDlkNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdAotU291cmNlIDoKLTxhIGhyZWY9IjwlPWMlPiI+YTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTddICg8YSBocmVmPSI8JT1jJT4iPikKLVsxNywgMThdIChhKQotWzE4LCAyMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTddICg8YSBocmVmJiM2MTsiPCUmIzYxO2MlPiI+KUBbMTgsIDIyXSAoPC9hPikKLS0tLS0jdGV4dChhKUBbMTcsIDE4XSAoYSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjQ3N2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0MgotU291cmNlIDoKLTxhIGI9ImMiIGQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iYyIgZD0iZSI+KQotWzE1LCAxNl0gKGYpCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxNV0gKDxhIGImIzYxOyJjIiBkJiM2MTsiZSI+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTUsIDE2XSAoZikKLQotYi5uYW1lPXg6YgotYi52YWx1ZT1jCi1hIGI9Ci1hIHg6Yj1jCi1Tb3VyY2UgOgotPGEgeDpiPSJjIiBkPSJlIj5mPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxN10gKDxhIHg6Yj0iYyIgZD0iZSI+KQotWzE3LCAxOF0gKGYpCi1bMTgsIDIyXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxN10gKDxhIHg6YiYjNjE7ImMiIGQmIzYxOyJlIj4pQFsxOCwgMjJdICg8L2E+KQotLS0tLSN0ZXh0KGYpQFsxNywgMThdIChmKQotCi1Tb3VyY2UgOgotPGEgeDpiPSJjIiB5OmQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE5XSAoPGEgeDpiPSJjIiB5OmQ9ImUiPikKLVsxOSwgMjBdIChmKQotWzIwLCAyNF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTldICg8YSB4OmImIzYxOyJjIiB5OmQmIzYxOyJlIj4pQFsyMCwgMjRdICg8L2E+KQotLS0tLSN0ZXh0KGYpQFsxOSwgMjBdIChmKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlYjU3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdAotU291cmNlIDoKLTxhPjwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLVszNiwgNDBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszNiwgNDBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKGNvbnRlbnRPZkNEQVRBU2VjdGlvbilAWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotCi1jb250ZW50T2ZDREFUQVNlY3Rpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZjg2YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MgotU291cmNlIDoKLTxhPjwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLVszNiwgNDBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszNiwgNDBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKGNvbnRlbnRPZkNEQVRBU2VjdGlvbilAWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotCi1jb250ZW50T2ZDREFUQVNlY3Rpb24KLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgY29udGVudF1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotWzI2LCAzMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI2LCAzMF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3IGNvbnRlbnQpQFszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotCi1uZXcgY29udGVudAotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi1bMjYsIDMwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjYsIDMwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihuZXcgY29udGVudClAWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi0KLW5ldyBjb250ZW50CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NjMTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDMKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi1bMzYsIDQwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzYsIDQwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihjb250ZW50T2ZDREFUQVNlY3Rpb24pQFszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLQotY29udGVudE9mQ0RBVEFTZWN0aW9uCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3IDwgY29udGVudF1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyOF0gKDwhW0NEQVRBW25ldyA8IGNvbnRlbnRdXT4pCi1bMjgsIDMyXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjgsIDMyXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihuZXcgPCBjb250ZW50KUBbMywgMjhdICg8IVtDREFUQVtuZXcgPCBjb250ZW50XV0+KQotCi1uZXcgPCBjb250ZW50Ci1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3ID4gY29udGVudF1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyOF0gKDwhW0NEQVRBW25ldyA+IGNvbnRlbnRdXT4pCi1bMjgsIDMyXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjgsIDMyXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihuZXcgPiBjb250ZW50KUBbMywgMjhdICg8IVtDREFUQVtuZXcgPiBjb250ZW50XV0+KQotCi1uZXcgPiBjb250ZW50CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2NhOTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3QKLVNvdXJjZSA6Ci08IURPQ1RZUEUgSFRNTD48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPCFET0NUWVBFIEhUTUw+KQotWzE1LCAyMV0gKDxodG1sPikKLVsyMSwgMjhdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1MKG51bGwpKG51bGwpQFswLCAxNV0gKDwhRE9DVFlQRSBIVE1MPikKLS0taHRtbC9odG1sQFsxNSwgMjFdICg8aHRtbD4pQFsyMSwgMjhdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotPCFET0NUWVBFIEhUTUwgU1lTVEVNICJzeXRlbSI+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzMF0gKDwhRE9DVFlQRSBIVE1MIFNZU1RFTSAic3l0ZW0iPikKLVszMCwgMzZdICg8aHRtbD4pCi1bMzYsIDQzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTChudWxsKShzeXRlbSlAWzAsIDMwXSAoPCFET0NUWVBFIEhUTUwgU1lTVEVNICJzeXRlbSI+KQotLS1odG1sL2h0bWxAWzMwLCAzNl0gKDxodG1sPilAWzM2LCA0M10gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDM5XSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotWzM5LCA0NV0gKDxodG1sPikKLVs0NSwgNTJdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1MKHB1YmxpYykoc3l0ZW0pQFswLCAzOV0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLS0taHRtbC9odG1sQFszOSwgNDVdICg8aHRtbD4pQFs0NSwgNTJdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKCApCi1bMSwgNDBdICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi1bNDAsIDQ2XSAoPGh0bWw+KQotWzQ2LCA1M10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KCApQFswLCAxXSAoICkKLS0tSFRNTChwdWJsaWMpKHN5dGVtKUBbMSwgNDBdICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi0tLWh0bWwvaHRtbEBbNDAsIDQ2XSAoPGh0bWw+KUBbNDYsIDUzXSAoPC9odG1sPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjZDgyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Ci1Tb3VyY2UgOgotPGE+PGIgZT0iZiIgYz0iZCI+PGcgLz48aCAvPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMThdICg8YiBlPSJmIiBjPSJkIj4pCi1bMTgsIDIzXSAoPGcgLz4pCi1bMjMsIDI4XSAoPGggLz4pCi1bMjgsIDMyXSAoPC9iPikKLVszMiwgMzZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszMiwgMzZdICg8L2E+KQotLS0tLWIvYkBbMywgMThdICg8YiBlJiM2MTsiZiIgYyYjNjE7ImQiPilAWzI4LCAzMl0gKDwvYj4pCi0tLS0tLS1nL0BbMTgsIDIzXSAoPGcgLz4pCi0tLS0tLS1oL0BbMjMsIDI4XSAoPGggLz4pCi0KLVNvdXJjZSA6Ci08YT48aSBlPSJmIiBjPSJkIj48ZyAvPjxoIC8+PC9pPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAxOF0gKDxpIGU9ImYiIGM9ImQiPikKLVsxOCwgMjNdICg8ZyAvPikKLVsyMywgMjhdICg8aCAvPikKLVsyOCwgMzJdICg8L2k+KQotWzMyLCAzNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMyLCAzNl0gKDwvYT4pCi0tLS0taS9pQFszLCAxOF0gKDxpIGUmIzYxOyJmIiBjJiM2MTsiZCI+KUBbMjgsIDMyXSAoPC9pPikKLS0tLS0tLWcvQFsxOCwgMjNdICg8ZyAvPikKLS0tLS0tLWgvQFsyMywgMjhdICg8aCAvPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQ2MDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0MgotU291cmNlIDoKLTxhPjxiPmM8L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDZdICg8Yj4pCi1bNiwgN10gKGMpCi1bNywgMTFdICg8L2I+KQotWzExLCAxNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzExLCAxNV0gKDwvYT4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNywgMTFdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzYsIDddIChjKQotCi1hLnRhZ05hbWU9eDphCi1Tb3VyY2UgOgotPHg6YT48Yj5jPC9iPjwveDphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHg6YT4pCi1bNSwgOF0gKDxiPikKLVs4LCA5XSAoYykKLVs5LCAxM10gKDwvYj4pCi1bMTMsIDE5XSAoPC94OmE+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS14OmEveDphQFswLCA1XSAoPHg6YT4pQFsxMywgMTldICg8L3g6YT4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbOSwgMTNdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzgsIDldIChjKQotCi1Tb3VyY2UgOgotPHg6YT48eTpiPmM8L3k6Yj48L3g6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx4OmE+KQotWzUsIDEwXSAoPHk6Yj4pCi1bMTAsIDExXSAoYykKLVsxMSwgMTddICg8L3k6Yj4pCi1bMTcsIDIzXSAoPC94OmE+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS14OmEveDphQFswLCA1XSAoPHg6YT4pQFsxNywgMjNdICg8L3g6YT4pCi0tLS0teTpiL3k6YkBbNSwgMTBdICg8eTpiPilAWzExLCAxN10gKDwveTpiPikKLS0tLS0tLSN0ZXh0KGMpQFsxMCwgMTFdIChjKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZGFiZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzCi1Tb3VyY2UgOgotPHg6YT48Yj5jPC9iPjwveDphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHg6YT4pCi1bNSwgOF0gKDxiPikKLVs4LCA5XSAoYykKLVs5LCAxM10gKDwvYj4pCi1bMTMsIDE5XSAoPC94OmE+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS14OmEveDphQFswLCA1XSAoPHg6YT4pQFsxMywgMTldICg8L3g6YT4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbOSwgMTNdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzgsIDldIChjKQotCi1hLnRhZ05hbWU9YQotU291cmNlIDoKLTxhPjxiPmM8L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDZdICg8Yj4pCi1bNiwgN10gKGMpCi1bNywgMTFdICg8L2I+KQotWzExLCAxNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzExLCAxNV0gKDwvYT4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNywgMTFdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzYsIDddIChjKQotCi1hLnRhZ05hbWU9eTphCi1Tb3VyY2UgOgotPHk6YT48Yj5jPC9iPjwveTphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHk6YT4pCi1bNSwgOF0gKDxiPikKLVs4LCA5XSAoYykKLVs5LCAxM10gKDwvYj4pCi1bMTMsIDE5XSAoPC95OmE+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS15OmEveTphQFswLCA1XSAoPHk6YT4pQFsxMywgMTldICg8L3k6YT4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbOSwgMTNdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzgsIDldIChjKQotCi1Tb3VyY2UgOgotPHk6YT48Yj5jPC9iPjwveTphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHk6YT4pCi1bNSwgOF0gKDxiPikKLVs4LCA5XSAoYykKLVs5LCAxM10gKDwvYj4pCi1bMTMsIDE5XSAoPC95OmE+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS15OmEveTphQFswLCA1XSAoPHk6YT4pQFsxMywgMTldICg8L3k6YT4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbOSwgMTNdICg8L2I+KQotLS0tLS0tI3RleHQoYylAWzgsIDldIChjKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjYWZlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdAotU291cmNlIDoKLTxwPmE8YnI+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTxicj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dCgpCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTxicj5iPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDldIChiKQotWzksIDEzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOSwgMTNdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoYilAWzgsIDldIChiKQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8YnI+YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCA5XSAoYikKLVs5LCAxM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzksIDEzXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KGIpQFs4LCA5XSAoYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM4NmVmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyCi1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs0LCA4XSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0KLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPjxiPjwvYj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKDxiPikKLVs2LCAxMF0gKDwvYj4pCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs2LCAxMF0gKDwvYj4pCi0tLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD48Yj5hPC9iPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoPGI+KQotWzYsIDddIChhKQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGEpQFs2LCA3XSAoYSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU2NWVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzCi1Tb3VyY2UgOgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotLS0jdGV4dCgpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcyZjg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ci1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLQotU291cmNlIDoKLTxwPiZhbXA7Z3Q7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdICgmYW1wOykKLVs4LCAxMV0gKGd0OykKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KCZndDspQHtbMywgOF0gKCZhbXA7KSxbOCwgMTFdIChndDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTcyZWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDIKLVNvdXJjZSA6Ci08cD5hPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs0LCA4XSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0KLVNvdXJjZSA6Ci08cD5hJmFtcDtndDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEyXSAoZ3Q7KQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYSZndDspQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LCAxMl0gKGd0Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyY2IzYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MwotU291cmNlIDoKLTxwPmE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzQsIDhdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLQotU291cmNlIDoKLTxwPmFiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYikKLVs1LCA5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNSwgOV0gKDwvcD4pCi0tLS0tI3RleHQoYWIpQFszLCA1XSAoYWIpCi0KLVNvdXJjZSA6Ci08cD5hYiZhbXA7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYikKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoYWImKUB7WzMsIDVdIChhYiksWzUsIDEwXSAoJmFtcDspfQotCi1Tb3VyY2UgOgotPHA+YWImYW1wO2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDExXSAoYykKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGFiJmMpQHtbMywgNV0gKGFiKSxbNSwgMTBdICgmYW1wOyksWzEwLCAxMV0gKGMpfQotCi1Tb3VyY2UgOgotPHA+ZGFiJmFtcDtjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdIChkYWIpCi1bNiwgMTFdICgmYW1wOykKLVsxMSwgMTJdIChjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoZGFiJmMpQHtbMywgNl0gKGRhYiksWzYsIDExXSAoJmFtcDspLFsxMSwgMTJdIChjKX0KLQotU291cmNlIDoKLTxwPmRhYiZhbXA7Y2U8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKGRhYikKLVs2LCAxMV0gKCZhbXA7KQotWzExLCAxM10gKGNlKQotWzEzLCAxN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEzLCAxN10gKDwvcD4pCi0tLS0tI3RleHQoZGFiJmNlKUB7WzMsIDZdIChkYWIpLFs2LCAxMV0gKCZhbXA7KSxbMTEsIDEzXSAoY2UpfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U4MGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQKLVNvdXJjZSA6Ci08cD5hJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGIpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LCAxMF0gKGIpfQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChiKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoKQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEwXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5jYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoY2EpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTFdIChiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYylAWzMsNF0oWzMsIDVdIChjYSkpCi0tLS0tI3RleHQoYSZiKUB7WzQsNV0oWzMsIDVdIChjYSkpLFs1LCAxMF0gKCZhbXA7KSxbMTAsIDExXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5jYSZhbXA7YmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGNhKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDEyXSAoYmEpCi1bMTIsIDE3XSAoJmFtcDspCi1bMTcsIDE4XSAoYikKLVsxOCwgMjJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOCwgMjJdICg8L3A+KQotLS0tLSN0ZXh0KGNhJmIpQHtbMywgNV0gKGNhKSxbNSwgMTBdICgmYW1wOyksWzEwLDExXShbMTAsIDEyXSAoYmEpKX0KLS0tLS0jdGV4dChhJmIpQHtbMTEsMTJdKFsxMCwgMTJdIChiYSkpLFsxMiwgMTddICgmYW1wOyksWzE3LCAxOF0gKGIpfQotCi1Tb3VyY2UgOgotPHA+Y2EmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGNhKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDExXSAoYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGNhJmIpQHtbMywgNV0gKGNhKSxbNSwgMTBdICgmYW1wOyksWzEwLCAxMV0gKGIpfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGViOGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDUKLVNvdXJjZSA6Ci08cD5hJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGIpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LCAxMF0gKGIpfQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7YmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDExXSAoYmEpCi1bMTEsIDE2XSAoJmFtcDspCi1bMTYsIDE3XSAoYikKLVsxNywgMjFdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNywgMjFdICg8L3A+KQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksMTBdKFs5LCAxMV0gKGJhKSl9Ci0tLS0tI3RleHQoYSZiKUB7WzEwLDExXShbOSwgMTFdIChiYSkpLFsxMSwgMTZdICgmYW1wOyksWzE2LCAxN10gKGIpfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTMxNWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDYKLVNvdXJjZSA6Ci08cD5hJmFtcDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOSwgMTNdICg8L3A+KQotLS0tLSN0ZXh0KGEmKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KX0KLQotU291cmNlIDoKLTxwPmEmYW1wO2EmYW1wOzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChhKQotWzEwLCAxNV0gKCZhbXA7KQotWzE1LCAxOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE1LCAxOV0gKDwvcD4pCi0tLS0tI3RleHQoYSYpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspfQotLS0tLSN0ZXh0KGEmKUB7WzksIDEwXSAoYSksWzEwLCAxNV0gKCZhbXA7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ny50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1ZDk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3Ci1Tb3VyY2UgOgotPGE+YSYjNjU7JiN4NDE7JnVuazsmdW5rJnVuazwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJiM2NTspCi1bOSwgMTVdICgmI3g0MTspCi1bMTUsIDIwXSAoJnVuazspCi1bMjAsIDI0XSAoJnVuaykKLVsyNCwgMjhdICgmdW5rKQotWzI4LCAzMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI4LCAzMl0gKDwvYT4pCi0tLS0tI3RleHQoYUFBKUB7WzMsIDRdIChhKSxbNCwgOV0gKCYjNjU7KSxbOSwgMTVdICgmI3g0MTspfQotLS0tLXVuawotLS0tLSN0ZXh0KCZ1bmsmdW5rKUB7WzIwLCAyNF0gKCZ1bmspLFsyNCwgMjhdICgmdW5rKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlY2IxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4Ci1Tb3VyY2UgOgotJmlibTsmcnRwOwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoJmlibTspCi1bNSwgMTBdICgmcnRwOykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taWJtCi0tLXJ0cAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODAyZTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDkudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDkKLVNvdXJjZSA6Ci0mbHQ7Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDRdICgmbHQ7KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8KUBbMCwgNF0gKCZsdDspCi0KLVNvdXJjZSA6Ci0mbHQ7Jmd0Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDRdICgmbHQ7KQotWzQsIDddICgmZ3QpCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwmZ3QpQHtbMCwgNF0gKCZsdDspLFs0LCA3XSAoJmd0KX0KLQotU291cmNlIDoKLSZsdDsmZ3Q7Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDRdICgmbHQ7KQotWzQsIDhdICgmZ3Q7KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8PilAe1swLCA0XSAoJmx0OyksWzQsIDhdICgmZ3Q7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmFlYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdAotU291cmNlIDoKLTxhPjw/ZWNobyAkUEhQX1NFTEY/PjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyMV0gKDw/ZWNobyAkUEhQX1NFTEY/PikKLVsyMSwgMjVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyMSwgMjVdICg8L2E+KQotLS0tLWVjaG8oJFBIUF9TRUxGKQotCi10YXJnZXQoZWNobykgZGF0YSAoJFBIUF9TRUxGKQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OTY3OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Ci1Tb3VyY2UgOgotPFA+PEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDZdICg8Qj4pCi1bNiwgMTBdICg8L0I+KQotWzEwLCAxM10gKDxCPikKLVsxMywgMTddICg8L0I+KQotWzE3LCAyMV0gKDwvUD4pCi1bMjEsIDI0XSAoPFA+KQotWzI0LCAyOF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzE3LCAyMV0gKDwvUD4pCi0tLS0tQi9CQFszLCA2XSAoPEI+KUBbNiwgMTBdICg8L0I+KQotLS0tLUIvQkBbMTAsIDEzXSAoPEI+KUBbMTMsIDE3XSAoPC9CPikKLS0tUC9QQFsyMSwgMjRdICg8UD4pQFsyNCwgMjhdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA3XSAoPEI+KQotWzcsIDExXSAoPC9CPikKLVsxMSwgMTRdICg8Qj4pCi1bMTQsIDE4XSAoPC9CPikKLVsxOCwgMjJdICg8L1A+KQotWzIyLCAyNV0gKDxQPikKLVsyNSwgMjldICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzE4LCAyMl0gKDwvUD4pCi0tLS0tQi9CQFs0LCA3XSAoPEI+KUBbNywgMTFdICg8L0I+KQotLS0tLUIvQkBbMTEsIDE0XSAoPEI+KUBbMTQsIDE4XSAoPC9CPikKLS0tUC9QQFsyMiwgMjVdICg8UD4pQFsyNSwgMjldICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDE1XSAoPEI+KQotWzE1LCAxOV0gKDwvQj4pCi1bMTksIDIzXSAoPC9QPikKLVsyMywgMjZdICg8UD4pCi1bMjYsIDMwXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsxOSwgMjNdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tQi9CQFsxMiwgMTVdICg8Qj4pQFsxNSwgMTldICg8L0I+KQotLS1QL1BAWzIzLCAyNl0gKDxQPilAWzI2LCAzMF0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjRdICg8L1A+KQotWzI0LCAyN10gKDxQPikKLVsyNywgMzFdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIwLCAyNF0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLVAvUEBbMjQsIDI3XSAoPFA+KUBbMjcsIDMxXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI4XSAoPFA+KQotWzI4LCAzMl0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tUC9QQFsyNSwgMjhdICg8UD4pQFsyOCwgMzJdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj5kPC9QPmU8UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI2XSAoZSkKLVsyNiwgMjldICg8UD4pCi1bMjksIDMzXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMSwgMjVdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS0tLSN0ZXh0KGQpQFsyMCwgMjFdIChkKQotLS0jdGV4dChlKUBbMjUsIDI2XSAoZSkKLS0tUC9QQFsyNiwgMjldICg8UD4pQFsyOSwgMzNdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj5kPC9QPmU8UD5mPC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyNl0gKGUpCi1bMjYsIDI5XSAoPFA+KQotWzI5LCAzMF0gKGYpCi1bMzAsIDM0XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMSwgMjVdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS0tLSN0ZXh0KGQpQFsyMCwgMjFdIChkKQotLS0jdGV4dChlKUBbMjUsIDI2XSAoZSkKLS0tUC9QQFsyNiwgMjldICg8UD4pQFszMCwgMzRdICg8L1A+KQotLS0tLSN0ZXh0KGYpQFsyOSwgMzBdIChmKQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj5kPC9QPmU8UD5mPC9QPmcKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjZdIChlKQotWzI2LCAyOV0gKDxQPikKLVsyOSwgMzBdIChmKQotWzMwLCAzNF0gKDwvUD4pCi1bMzQsIDM1XSAoZykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMSwgMjVdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS0tLSN0ZXh0KGQpQFsyMCwgMjFdIChkKQotLS0jdGV4dChlKUBbMjUsIDI2XSAoZSkKLS0tUC9QQFsyNiwgMjldICg8UD4pQFszMCwgMzRdICg8L1A+KQotLS0tLSN0ZXh0KGYpQFsyOSwgMzBdIChmKQotLS0jdGV4dChnKUBbMzQsIDM1XSAoZykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5OTBhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyCi1Tb3VyY2UgOgotPGEgYj0iIiAgYz0iYyI+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iIiAgYz0iYyI+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCAxNV0gKDxhIGImIzYxOyIiICBjJiM2MTsiYyI+KQotCi1iPVtdCi1jPVtjXQotU291cmNlIDoKLTxhIGI9IiIgZCBjPSJjIj4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTZdICg8YSBiPSIiIGQgYz0iYyI+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCAxNl0gKDxhIGImIzYxOyIiIGQgYyYjNjE7ImMiPikKLQotYj1bXQotZD1bXQotYz1bY10KLVNvdXJjZSA6Ci08YSBiPSIiICBjPSJjIj4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTVdICg8YSBiPSIiICBjPSJjIj4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDE1XSAoPGEgYiYjNjE7IiIgIGMmIzYxOyJjIj4pCi0KLWI9W10KLWM9W2NdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM4YWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDMKLVNvdXJjZSA6Ci08YSBiICA+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDddICg8YSBiICA+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCA3XSAoPGEgYiAgPikKLQotYj1bXQotb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQKLVNvdXJjZSA6Ci08YSBiID4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxhIGIgPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgNl0gKDxhIGIgPikKLQotYj1bXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzMmNlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NAotU291cmNlIDoKLTxhPgotCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNV0gKAotCi0pCi1bNSwgNl0gKDwpCi1bNiwgOF0gKCUgKQotWzgsIDEwXSAoYSApCi1bMTAsIDExXSAoJSkKLVsxMSwgMTNdICg+Ci0pCi1bMTMsIDE0XSAoPCkKLVsxNCwgMTZdICglICkKLVsxNiwgMThdIChiICkKLVsxOCwgMTldICglKQotWzE5LCAyMV0gKD4KLSkKLVsyMSwgMjVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyMSwgMjVdICg8L2E+KQotLS0tLSN0ZXh0KFxuXG48JSBhICU+XG48JSBiICU+XG4pQHtbMywgNV0gKFxuXG4pLFs1LCA2XSAoPCksWzYsIDhdICglICksWzgsIDEwXSAoYSApLFsxMCwgMTFdICglKSxbMTEsIDEzXSAoPlxuKSxbMTMsIDE0XSAoPCksWzE0LCAxNl0gKCUgKSxbMTYsIDE4XSAoYiApLFsxOCwgMTldICglKSxbMTksIDIxXSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPAotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA1XSAoPCkKLVs1LCA2XSAoCi0pCi1bNiwgN10gKDwpCi1bNywgOV0gKCUgKQotWzksIDExXSAoYSApCi1bMTEsIDEyXSAoJSkKLVsxMiwgMTRdICg+Ci0pCi1bMTQsIDE1XSAoPCkKLVsxNSwgMTddICglICkKLVsxNywgMTldIChiICkKLVsxOSwgMjBdICglKQotWzIwLCAyMl0gKD4KLSkKLVsyMiwgMjZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyMiwgMjZdICg8L2E+KQotLS0tLSN0ZXh0KFxuPFxuPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzMsIDRdIChcbiksWzQsIDVdICg8KSxbNSwgNl0gKFxuKSxbNiwgN10gKDwpLFs3LCA5XSAoJSApLFs5LCAxMV0gKGEgKSxbMTEsIDEyXSAoJSksWzEyLCAxNF0gKD5cbiksWzE0LCAxNV0gKDwpLFsxNSwgMTddICglICksWzE3LCAxOV0gKGIgKSxbMTksIDIwXSAoJSksWzIwLCAyMl0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDddICg8YgotKQotWzcsIDhdICg8KQotWzgsIDEwXSAoJSApCi1bMTAsIDEyXSAoYSApCi1bMTIsIDEzXSAoJSkKLVsxMywgMTVdICg+Ci0pCi1bMTUsIDE2XSAoPCkKLVsxNiwgMThdICglICkKLVsxOCwgMjBdIChiICkKLVsyMCwgMjFdICglKQotWzIxLCAyM10gKD4KLSkKLVsyMywgMjddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyMywgMjddICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJAWzQsIDddICg8YlxuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzcsIDhdICg8KSxbOCwgMTBdICglICksWzEwLCAxMl0gKGEgKSxbMTIsIDEzXSAoJSksWzEzLCAxNV0gKD5cbiksWzE1LCAxNl0gKDwpLFsxNiwgMThdICglICksWzE4LCAyMF0gKGIgKSxbMjAsIDIxXSAoJSksWzIxLCAyM10gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiYwotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA4XSAoPGJjCi0pCi1bOCwgOV0gKDwpCi1bOSwgMTFdICglICkKLVsxMSwgMTNdIChhICkKLVsxMywgMTRdICglKQotWzE0LCAxNl0gKD4KLSkKLVsxNiwgMTddICg8KQotWzE3LCAxOV0gKCUgKQotWzE5LCAyMV0gKGIgKQotWzIxLCAyMl0gKCUpCi1bMjIsIDI0XSAoPgotKQotWzI0LCAyOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI0LCAyOF0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNAWzQsIDhdICg8YmNcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1s4LCA5XSAoPCksWzksIDExXSAoJSApLFsxMSwgMTNdIChhICksWzEzLCAxNF0gKCUpLFsxNCwgMTZdICg+XG4pLFsxNiwgMTddICg8KSxbMTcsIDE5XSAoJSApLFsxOSwgMjFdIChiICksWzIxLCAyMl0gKCUpLFsyMiwgMjRdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmNkCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDldICg8YmNkCi0pCi1bOSwgMTBdICg8KQotWzEwLCAxMl0gKCUgKQotWzEyLCAxNF0gKGEgKQotWzE0LCAxNV0gKCUpCi1bMTUsIDE3XSAoPgotKQotWzE3LCAxOF0gKDwpCi1bMTgsIDIwXSAoJSApCi1bMjAsIDIyXSAoYiApCi1bMjIsIDIzXSAoJSkKLVsyMywgMjVdICg+Ci0pCi1bMjUsIDI5XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjUsIDI5XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY2RAWzQsIDldICg8YmNkXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbOSwgMTBdICg8KSxbMTAsIDEyXSAoJSApLFsxMiwgMTRdIChhICksWzE0LCAxNV0gKCUpLFsxNSwgMTddICg+XG4pLFsxNywgMThdICg8KSxbMTgsIDIwXSAoJSApLFsyMCwgMjJdIChiICksWzIyLCAyM10gKCUpLFsyMywgMjVdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmNkZQotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCAxMF0gKDxiY2RlCi0pCi1bMTAsIDExXSAoPCkKLVsxMSwgMTNdICglICkKLVsxMywgMTVdIChhICkKLVsxNSwgMTZdICglKQotWzE2LCAxOF0gKD4KLSkKLVsxOCwgMTldICg8KQotWzE5LCAyMV0gKCUgKQotWzIxLCAyM10gKGIgKQotWzIzLCAyNF0gKCUpCi1bMjQsIDI2XSAoPgotKQotWzI2LCAzMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI2LCAzMF0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNkZUBbNCwgMTBdICg8YmNkZVxuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzEwLCAxMV0gKDwpLFsxMSwgMTNdICglICksWzEzLCAxNV0gKGEgKSxbMTUsIDE2XSAoJSksWzE2LCAxOF0gKD5cbiksWzE4LCAxOV0gKDwpLFsxOSwgMjFdICglICksWzIxLCAyM10gKGIgKSxbMjMsIDI0XSAoJSksWzI0LCAyNl0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiY2RlPgotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCAxMF0gKDxiY2RlPikKLVsxMCwgMTFdICgKLSkKLVsxMSwgMTJdICg8KQotWzEyLCAxNF0gKCUgKQotWzE0LCAxNl0gKGEgKQotWzE2LCAxN10gKCUpCi1bMTcsIDE5XSAoPgotKQotWzE5LCAyMF0gKDwpCi1bMjAsIDIyXSAoJSApCi1bMjIsIDI0XSAoYiApCi1bMjQsIDI1XSAoJSkKLVsyNSwgMjddICg+Ci0pCi1bMjcsIDMxXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjcsIDMxXSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY2RlQFs0LCAxMF0gKDxiY2RlPikKLS0tLS0tLSN0ZXh0KFxuPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzEwLCAxMV0gKFxuKSxbMTEsIDEyXSAoPCksWzEyLCAxNF0gKCUgKSxbMTQsIDE2XSAoYSApLFsxNiwgMTddICglKSxbMTcsIDE5XSAoPlxuKSxbMTksIDIwXSAoPCksWzIwLCAyMl0gKCUgKSxbMjIsIDI0XSAoYiApLFsyNCwgMjVdICglKSxbMjUsIDI3XSAoPlxuKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYTkwMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ci1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiY2NjKUBbMywgMTJdIChhYWJiYmJjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiY2NjKUBbNSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmIpQFs1LDldKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoY2NjKUBbOSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWNjYykKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDhdIChhYWNjYykpCi0tLS0tI3RleHQoY2NjKUBbNSw4XShbMywgOF0gKGFhY2NjKSkKLQotU291cmNlIDoKLTxwPmFhZGRkZGRkZGNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxNV0gKGFhZGRkZGRkZGNjYykKLVsxNSwgMTldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNSwgMTldICg8L3A+KQotLS0tLSN0ZXh0KGFhZGRkZGRkZClAWzMsMTJdKFszLCAxNV0gKGFhZGRkZGRkZGNjYykpCi0tLS0tI3RleHQoY2NjKUBbMTIsMTVdKFszLCAxNV0gKGFhZGRkZGRkZGNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWRkZGRkZGRjY2NlZWU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMThdIChhYWRkZGRkZGRjY2NlZWUpCi1bMTgsIDIyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTgsIDIyXSAoPC9wPikKLS0tLS0jdGV4dChhYWRkZGRkZGQpQFszLDEyXShbMywgMThdIChhYWRkZGRkZGRjY2NlZWUpKQotLS0tLSN0ZXh0KGNjY2VlZSlAWzEyLDE4XShbMywgMThdIChhYWRkZGRkZGRjY2NlZWUpKQotCi1Tb3VyY2UgOgotPHA+YWFkZGRkZGRkYmJiYmNjY2VlZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpCi1bMjIsIDI2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMjIsIDI2XSAoPC9wPikKLS0tLS0jdGV4dChhYWRkZGRkZGQpQFszLDEyXShbMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKSkKLS0tLS0jdGV4dChiYmJiKUBbMTIsMTZdKFszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpKQotLS0tLSN0ZXh0KGNjY2VlZSlAWzE2LDIyXShbMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExMjJjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiY2NjKUBbMywgMTJdIChhYWJiYmJjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiY2NjKUBbNSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmIpQFs1LDldKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoY2NjKUBbOSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWNjYykKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDhdIChhYWNjYykpCi0tLS0tI3RleHQoY2NjKUBbNSw4XShbMywgOF0gKGFhY2NjKSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDE5XSAoY2NjKQotWzE5LCAyM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tI3RleHQoY2NjKUBbMTYsIDE5XSAoY2NjKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDUzYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDMKLVNvdXJjZSA6Ci08cD5hYTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzUsIDldICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNiwgMjBdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMTldIChjY2MpCi1bMTksIDIzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS0jdGV4dChjY2MpQFsxNiwgMTldIChjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFjY2MpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA4XSAoYWFjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzUsOF0oWzMsIDhdIChhYWNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAxOV0gKGNjYykKLVsxOSwgMjNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLSN0ZXh0KGNjYylAWzE2LCAxOV0gKGNjYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiYmYzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0Ci1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hYWE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKGFhYSkKLVs2LCAxMF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzYsIDEwXSAoPC9wPikKLS0tLS0jdGV4dChhYWEpQFszLCA2XSAoYWFhKQotCi1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5jY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddIChjY2NjKQotWzcsIDExXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNywgMTFdICg8L3A+KQotLS0tLSN0ZXh0KGNjY2MpQFszLCA3XSAoY2NjYykKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5jY2NjYWFhPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEwXSAoY2NjY2FhYSkKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGNjY2MpQFszLDddKFszLCAxMF0gKGNjY2NhYWEpKQotLS0tLSN0ZXh0KGFhYSlAWzcsMTBdKFszLCAxMF0gKGNjY2NhYWEpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2VkYjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1Ci1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiY2NjKUBbMywgMTJdIChhYWJiYmJjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmIpQFszLDldKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoY2NjKUBbOSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhYmJiYjxicj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOV0gKGFhYmJiYikKLVs5LCAxM10gKDxicj4pCi1bMTMsIDE2XSAoY2NjKQotWzE2LCAyMF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE2LCAyMF0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMywgOV0gKGFhYmJiYikKLS0tLS1ickBbOSwgMTNdICg8YnI+KQotLS0tLSN0ZXh0KGNjYylAWzEzLCAxNl0gKGNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYjxicj5jY2NkPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDldIChhYWJiYmIpCi1bOSwgMTNdICg8YnI+KQotWzEzLCAxN10gKGNjY2QpCi1bMTcsIDIxXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTcsIDIxXSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmIpQFszLCA5XSAoYWFiYmJiKQotLS0tLWJyQFs5LCAxM10gKDxicj4pCi0tLS0tI3RleHQoY2NjZClAWzEzLCAxN10gKGNjY2QpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmI8YnI+Y2NjZGU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOV0gKGFhYmJiYikKLVs5LCAxM10gKDxicj4pCi1bMTMsIDE4XSAoY2NjZGUpCi1bMTgsIDIyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTgsIDIyXSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmIpQFszLCA5XSAoYWFiYmJiKQotLS0tLWJyQFs5LCAxM10gKDxicj4pCi0tLS0tI3RleHQoY2NjZGUpQFsxMywgMThdIChjY2NkZSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj48YnI+Y2NjZGU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPGJyPikKLVsyMCwgMjVdIChjY2NkZSkKLVsyNSwgMjldICg8L3A+KQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyIDogd2FybmluZyA6IHZhaW4KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzI1LCAyOV0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA1XSAoYWEpKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLWJyQFsxNiwgMjBdICg8YnI+KQotLS0tLSN0ZXh0KGNjY2RlKUBbMjAsIDI1XSAoY2NjZGUpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+PGJyPjxpPmNjYzwvaT5kZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8YnI+KQotWzIwLCAyM10gKDxpPikKLVsyMywgMjZdIChjY2MpCi1bMjYsIDMwXSAoPC9pPikKLVszMCwgMzJdIChkZSkKLVszMiwgMzZdICg8L3A+KQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyIDogd2FybmluZyA6IHZhaW4KLVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIgOiB3YXJuaW5nIDogdmFpbgotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMzIsIDM2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDVdIChhYSkpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tYnJAWzE2LCAyMF0gKDxicj4pCi0tLS0taS9pQFsyMCwgMjNdICg8aT4pQFsyNiwgMzBdICg8L2k+KQotLS0tLS0tI3RleHQoY2NjKUBbMjMsIDI2XSAoY2NjKQotLS0tLSN0ZXh0KGRlKUBbMzAsMzJdKFszMCwgMzJdIChkZSkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ni50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MTc1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ni50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NgotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmIpQFs1LDldKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoY2NjKUBbOSwxMl0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLQotU291cmNlIDoKLTxwPmFhYmJiYmRjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTNdIChhYWJiYmJkY2NjKQotWzEzLCAxN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEzLCAxN10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxM10gKGFhYmJiYmRjY2MpKQotLS0tLSN0ZXh0KGJiYmJkKUBbNSwxMF0oWzMsIDEzXSAoYWFiYmJiZGNjYykpCi0tLS0tI3RleHQoY2NjKUBbMTAsMTNdKFszLCAxM10gKGFhYmJiYmRjY2MpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjM5ZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDcKLVNvdXJjZSA6Ci08cD5hYWFhYmJiYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMV0gKGFhYWFiYmJiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYWFhYSlAWzMsN10oWzMsIDExXSAoYWFhYWJiYmIpKQotLS0tLSN0ZXh0KGJiYmIpQFs3LDExXShbMywgMTFdIChhYWFhYmJiYikpCi0KLVNvdXJjZSA6Ci08cD5hYWFiYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFhYmIpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWFhYmIpQFszLCA4XSAoYWFhYmIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNGU3ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OAotU291cmNlIDoKLTxwPmFhYWFiYmJiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDExXSAoYWFhYWJiYmIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChhYWFhKUBbMyw3XShbMywgMTFdIChhYWFhYmJiYikpCi0tLS0tI3RleHQoYmJiYilAWzcsMTFdKFszLCAxMV0gKGFhYWFiYmJiKSkKLQotU291cmNlIDoKLTxwPmFiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYikKLVs1LCA5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNSwgOV0gKDwvcD4pCi0tLS0tI3RleHQoYWIpQFszLCA1XSAoYWIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0ZWJkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0Ci1Tb3VyY2UgOgotPGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbNiwgMTNdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTldICg8L2JvZHk+KQotWzE5LCAyNl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzE5LCAyNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyLCAxOV0gKDwvYm9keT4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48dGFibGUgYm9yZGVyPSIxIj48dHI+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDMwXSAoPHRhYmxlIGJvcmRlcj0iMSI+KQotWzMwLCAzNF0gKDx0cj4pCi1bMzQsIDM4XSAoPHRkPikKLVszOCwgNDNdICg8L3RkPikKLVs0MywgNDddICg8dGQ+KQotWzQ3LCA1Ml0gKDwvdGQ+KQotWzUyLCA1N10gKDwvdHI+KQotWzU3LCA2MV0gKDx0cj4pCi1bNjEsIDY1XSAoPHRkPikKLVs2NSwgNzBdICg8L3RkPikKLVs3MCwgNzRdICg8dGQ+KQotWzc0LCA3OV0gKDwvdGQ+KQotWzc5LCA4NF0gKDwvdHI+KQotWzg0LCA5Ml0gKDwvdGFibGU+KQotWzkyLCA5OV0gKDwvYm9keT4pCi1bOTksIDEwNl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzk5LCAxMDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFs5MiwgOTldICg8L2JvZHk+KQotLS0tLS0tdGFibGUvdGFibGVAWzEyLCAzMF0gKDx0YWJsZSBib3JkZXImIzYxOyIxIj4pQFs4NCwgOTJdICg8L3RhYmxlPikKLS0tLS0tLS0tdHIvdHJAWzMwLCAzNF0gKDx0cj4pQFs1MiwgNTddICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbMzQsIDM4XSAoPHRkPilAWzM4LCA0M10gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs0MywgNDddICg8dGQ+KUBbNDcsIDUyXSAoPC90ZD4pCi0tLS0tLS0tLXRyL3RyQFs1NywgNjFdICg8dHI+KUBbNzksIDg0XSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzYxLCA2NV0gKDx0ZD4pQFs2NSwgNzBdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNzAsIDc0XSAoPHRkPilAWzc0LCA3OV0gKDwvdGQ+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0iMSI+PHRyPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48Zm9udCBjb2xvcj0icmVkIj50ZXh0PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDMwXSAoPHRhYmxlIGJvcmRlcj0iMSI+KQotWzMwLCAzNF0gKDx0cj4pCi1bMzQsIDM4XSAoPHRkPikKLVszOCwgNDNdICg8L3RkPikKLVs0MywgNDddICg8dGQ+KQotWzQ3LCA1Ml0gKDwvdGQ+KQotWzUyLCA1N10gKDwvdHI+KQotWzU3LCA2MV0gKDx0cj4pCi1bNjEsIDY1XSAoPHRkPikKLVs2NSwgNzBdICg8L3RkPikKLVs3MCwgNzRdICg8dGQ+KQotWzc0LCA5Ml0gKDxmb250IGNvbG9yPSJyZWQiPikKLVs5MiwgOTZdICh0ZXh0KQotWzk2LCAxMDNdICg8L2ZvbnQ+KQotWzEwMywgMTA4XSAoPC90ZD4pCi1bMTA4LCAxMTNdICg8L3RyPikKLVsxMTMsIDEyMV0gKDwvdGFibGU+KQotWzEyMSwgMTI4XSAoPC9ib2R5PikKLVsxMjgsIDEzNV0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzEyOCwgMTM1XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIxLCAxMjhdICg8L2JvZHk+KQotLS0tLS0tdGFibGUvdGFibGVAWzEyLCAzMF0gKDx0YWJsZSBib3JkZXImIzYxOyIxIj4pQFsxMTMsIDEyMV0gKDwvdGFibGU+KQotLS0tLS0tLS10ci90ckBbMzAsIDM0XSAoPHRyPilAWzUyLCA1N10gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFszNCwgMzhdICg8dGQ+KUBbMzgsIDQzXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzQzLCA0N10gKDx0ZD4pQFs0NywgNTJdICg8L3RkPikKLS0tLS0tLS0tdHIvdHJAWzU3LCA2MV0gKDx0cj4pQFsxMDgsIDExM10gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFs2MSwgNjVdICg8dGQ+KUBbNjUsIDcwXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzcwLCA3NF0gKDx0ZD4pQFsxMDMsIDEwOF0gKDwvdGQ+KQotLS0tLS0tLS0tLS0tZm9udC9mb250QFs3NCwgOTJdICg8Zm9udCBjb2xvciYjNjE7InJlZCI+KUBbOTYsIDEwM10gKDwvZm9udD4pCi0tLS0tLS0tLS0tLS0tLSN0ZXh0KHRleHQpQFs5MiwgOTZdICh0ZXh0KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODkyY2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QKLVNvdXJjZSA6Ci08YT5oZWxsbyAmYW1wO2x0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJmFtcDspCi1bMTQsIDE3XSAobHQ7KQotWzE3LCAyMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE3LCAyMV0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gJmx0OylAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmYW1wOyksWzE0LCAxN10gKGx0Oyl9Ci0KLWhlbGxvICZsdDsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIyYmE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIKLVNvdXJjZSA6Ci08YT5oZWxsbyAmYW1wO2x0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJmFtcDspCi1bMTQsIDE3XSAobHQ7KQotWzE3LCAyMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE3LCAyMV0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gJmx0OylAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmYW1wOyksWzE0LCAxN10gKGx0Oyl9Ci0KLWhlbGxvICZsdDsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwNGEzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMKLUludmFsaWQgY2hhcmFjdGVyICgnPCcpIGZvdW5kCi1Tb3VyY2UgOgotPGE+dGV4dDwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAodGV4dCkKLVs3LCAxMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzcsIDExXSAoPC9hPikKLS0tLS0jdGV4dCh0ZXh0KUBbMywgN10gKHRleHQpCi0KLVNvdXJjZSA6Ci08YT5oZWxsbyAmbHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTNdICgmbHQ7KQotWzEzLCAxN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzEzLCAxN10gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gPClAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTNdICgmbHQ7KX0KLQotSW52YWxpZCBjaGFyYWN0ZXIgKCcmJykgZm91bmQKLVNvdXJjZSA6Ci08YT5oZWxsbyAmbHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTNdICgmbHQ7KQotWzEzLCAxN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzEzLCAxN10gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gPClAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTNdICgmbHQ7KX0KLQotU291cmNlIDoKLTxhPmhlbGxvICYjNjU7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmIzY1OykKLVsxNCwgMThdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNCwgMThdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIEEpQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJiM2NTspfQotCi1JbnZhbGlkIGNoYXJhY3RlciAoJyYnKSBmb3VuZAotU291cmNlIDoKLTxhPmhlbGxvICYjNjU7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmIzY1OykKLVsxNCwgMThdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNCwgMThdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIEEpQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJiM2NTspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWZlOTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ci1Tb3VyY2UgOgotPGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbNiwgMTNdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTldICg8L2JvZHk+KQotWzE5LCAyNl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzE5LCAyNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyLCAxOV0gKDwvYm9keT4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPC9wPikKLVsxOSwgMjZdICg8L2JvZHk+KQotWzI2LCAzM10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzI2LCAzM10gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzE5LCAyNl0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzE1LCAxOV0gKDwvcD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD50ZXh0PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKHRleHQpCi1bMTksIDIzXSAoPC9wPikKLVsyMywgMzBdICg8L2JvZHk+KQotWzMwLCAzN10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzMwLCAzN10gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzIzLCAzMF0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxNSwgMTldICh0ZXh0KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPnRleHQ8L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyN10gKDwvcD4pCi1bMjcsIDM0XSAoPC9ib2R5PikKLVszNCwgNDFdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszNCwgNDFdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsyNywgMzRdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyMywgMjddICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjhdICg8aW1nPikKLVsyOCwgMzJdICg8L3A+KQotWzMyLCAzOV0gKDwvYm9keT4pCi1bMzksIDQ2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzksIDQ2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMzIsIDM5XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjgsIDMyXSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotLS0tLS0tLS1pbWdAWzIzLCAyOF0gKDxpbWc+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPjxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDI0XSAoPGltZz4pCi1bMjQsIDI4XSAoPC9wPikKLVsyOCwgMzVdICg8L2JvZHk+KQotWzM1LCA0Ml0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM1LCA0Ml0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzI4LCAzNV0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzI0LCAyOF0gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS1pbWdAWzE5LCAyNF0gKDxpbWc+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPnRleHQ8aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI4XSAoPGltZz4pCi1bMjgsIDMyXSAoPC9wPikKLVszMiwgMzldICg8L2JvZHk+KQotWzM5LCA0Nl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM5LCA0Nl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzMyLCAzOV0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzI4LCAzMl0gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLS0tLS0tLS0taW1nQFsyMywgMjhdICg8aW1nPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE5XSAoPC9ib2R5PikKLVsxOSwgMjZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxOSwgMjZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMiwgMTldICg8L2JvZHk+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPnRleHQ8aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI4XSAoPGltZz4pCi1bMjgsIDMyXSAoPC9wPikKLVszMiwgMzldICg8L2JvZHk+KQotWzM5LCA0Nl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM5LCA0Nl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzMyLCAzOV0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzI4LCAzMl0gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLS0tLS0tLS0taW1nQFsyMywgMjhdICg8aW1nPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZjdkYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAKLVNvdXJjZSA6Ci08YSBiPSJjIj48Yj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA5XSAoPGEgYj0iYyI+KQotWzksIDEyXSAoPGI+KQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCA5XSAoPGEgYiYjNjE7ImMiPilAWzE2LCAyMF0gKDwvYT4pCi0tLS0tYi9iQFs5LCAxMl0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0KLUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Ci08Yj4KLTAoPCl0cnVlCi0wKGIpdHJ1ZQotMCg+KXRydWUKLQotU291cmNlIDoKLTxhIGI9ImMiPjxiIGM9ImQiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDldICg8YSBiPSJjIj4pCi1bOSwgMThdICg8YiBjPSJkIj4pCi1bMTgsIDIyXSAoPC9iPikKLVsyMiwgMjZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDldICg8YSBiJiM2MTsiYyI+KUBbMjIsIDI2XSAoPC9hPikKLS0tLS1iL2JAWzksIDE4XSAoPGIgYyYjNjE7ImQiPilAWzE4LCAyMl0gKDwvYj4pCi0KLUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Ci08YiBjPSJkIj4KLTAoPCl0cnVlCi0wKGIpdHJ1ZQotMChjKXRydWUKLTAoPSl0cnVlCi0wKCJkIil0cnVlCi0wKD4pdHJ1ZQotCi1Tb3VyY2UgOgotPGEgYj0iY2QiPjxiIGM9ImQiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDEwXSAoPGEgYj0iY2QiPikKLVsxMCwgMTldICg8YiBjPSJkIj4pCi1bMTksIDIzXSAoPC9iPikKLVsyMywgMjddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDEwXSAoPGEgYiYjNjE7ImNkIj4pQFsyMywgMjddICg8L2E+KQotLS0tLWIvYkBbMTAsIDE5XSAoPGIgYyYjNjE7ImQiPilAWzE5LCAyM10gKDwvYj4pCi0KLUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Ci08YiBjPSJkIj4KLTAoPCl0cnVlCi0wKGIpdHJ1ZQotMChjKXRydWUKLTAoPSl0cnVlCi0wKCJkIil0cnVlCi0wKD4pdHJ1ZQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk4OGNiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMQotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMWE4ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIKLVNvdXJjZSA6Ci08YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotCi1Tb3VyY2UgOgotPGE+PC9hPjxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLVs3LCAxMF0gKDxhPikKLVsxMCwgMTRdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLS0tYS9hQFs3LCAxMF0gKDxhPilAWzEwLCAxNF0gKDwvYT4pCi0KLVNvdXJjZSA6Ci08YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1NGY3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMwotU291cmNlIDoKLTxhPgotPGI+Ci08L2I+ICA8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNV0gKAotKQotWzUsIDhdICg8Yj4pCi1bOCwgMTBdICgKLSkKLVsxMCwgMTRdICg8L2I+KQotWzE0LCAxNl0gKCAgKQotWzE2LCAyMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE2LCAyMF0gKDwvYT4pCi0tLS0tI3RleHQoXHJcbilAWzMsIDVdIChcclxuKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEwLCAxNF0gKDwvYj4pCi0tLS0tLS0jdGV4dChcclxuKUBbOCwgMTBdIChcclxuKQotLS0tLSN0ZXh0KCAgKUBbMTQsIDE2XSAoICApCi0KLVNvdXJjZSA6Ci08YT4KLSAgPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICgKLSAgKQotWzcsIDExXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNywgMTFdICg8L2E+KQotLS0tLSN0ZXh0KFxyXG4pQFszLDVdKFszLCA3XSAoXHJcbiAgKSkKLS0tLS0jdGV4dCggIClAWzUsN10oWzMsIDddIChcclxuICApKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU2ZDViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNAotU291cmNlIDoKLTwlPSBhYWFhICU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdICg8KQotWzEsIDRdICglPSApCi1bNCwgOV0gKGFhYWEgKQotWzksIDEwXSAoJSkKLVsxMCwgMTFdICg+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8JSYjNjE7IGFhYWEgJT4pQHtbMCwgMV0gKDwpLFsxLCA0XSAoJSYjNjE7ICksWzQsIDldIChhYWFhICksWzksIDEwXSAoJSksWzEwLCAxMV0gKD4pfQotCi1Tb3VyY2UgOgotPCUgPSBhYWFhICU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdICg8KQotWzEsIDVdICglID0gKQotWzUsIDEwXSAoYWFhYSApCi1bMTAsIDExXSAoJSkKLVsxMSwgMTJdICg+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8JSAmIzYxOyBhYWFhICU+KUB7WzAsIDFdICg8KSxbMSwgNV0gKCUgJiM2MTsgKSxbNSwgMTBdIChhYWFhICksWzEwLCAxMV0gKCUpLFsxMSwgMTJdICg+KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGRjZjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDIKLVNvdXJjZSA6Ci08SFRNTD4KLTxIRUFEPjwvSEVBRD4KLTxCT0RZPjwvQk9EWT4KLTwvSFRNTD4KLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPEhUTUw+KQotWzYsIDhdICgKLSkKLVs4LCAxNF0gKDxIRUFEPikKLVsxNCwgMjFdICg8L0hFQUQ+KQotWzIxLCAyM10gKAotKQotWzIzLCAyOV0gKDxCT0RZPikKLVsyOSwgMzZdICg8L0JPRFk+KQotWzM2LCAzOF0gKAotKQotWzM4LCA0NV0gKDwvSFRNTD4pCi1bNDUsIDQ3XSAoCi0pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwvSFRNTEBbMCwgNl0gKDxIVE1MPilAWzM4LCA0NV0gKDwvSFRNTD4pCi0tLS0tI3RleHQoXHJcbilAWzYsIDhdIChcclxuKQotLS0tLUhFQUQvSEVBREBbOCwgMTRdICg8SEVBRD4pQFsxNCwgMjFdICg8L0hFQUQ+KQotLS0tLSN0ZXh0KFxyXG4pQFsyMSwgMjNdIChcclxuKQotLS0tLUJPRFkvQk9EWUBbMjMsIDI5XSAoPEJPRFk+KUBbMjksIDM2XSAoPC9CT0RZPikKLS0tLS0jdGV4dChcclxuKUBbMzYsIDM4XSAoXHJcbikKLS0tI3RleHQoXHJcbilAWzQ1LCA0N10gKFxyXG4pCi0KLVNvdXJjZSA6Ci08SFRNTD4KLTxIRUFEPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+Ci08L0hFQUQ+Ci08Qk9EWT48L0JPRFk+Ci08L0hUTUw+Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxIVE1MPikKLVs2LCA4XSAoCi0pCi1bOCwgMTRdICg8SEVBRD4pCi1bMTQsIDE2XSAoCi0pCi1bMTYsIDY0XSAoPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+KQotWzY0LCA2Nl0gKAotKQotWzY2LCA3M10gKDwvSEVBRD4pCi1bNzMsIDc1XSAoCi0pCi1bNzUsIDgxXSAoPEJPRFk+KQotWzgxLCA4OF0gKDwvQk9EWT4pCi1bODgsIDkwXSAoCi0pCi1bOTAsIDk3XSAoPC9IVE1MPikKLVs5NywgOTldICgKLSkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTC9IVE1MQFswLCA2XSAoPEhUTUw+KUBbOTAsIDk3XSAoPC9IVE1MPikKLS0tLS0jdGV4dChcclxuKUBbNiwgOF0gKFxyXG4pCi0tLS0tSEVBRC9IRUFEQFs4LCAxNF0gKDxIRUFEPilAWzY2LCA3M10gKDwvSEVBRD4pCi0tLS0tLS0jdGV4dChcclxuKUBbMTQsIDE2XSAoXHJcbikKLS0tLS0tLW1ldGFAWzE2LCA2NF0gKDxtZXRhIG5hbWUmIzYxOyJHRU5FUkFUT1IiIGNvbnRlbnQmIzYxOyJVcGRhdGVyIFRlc3QgMiI+KQotLS0tLS0tI3RleHQoXHJcbilAWzY0LCA2Nl0gKFxyXG4pCi0tLS0tI3RleHQoXHJcbilAWzczLCA3NV0gKFxyXG4pCi0tLS0tQk9EWS9CT0RZQFs3NSwgODFdICg8Qk9EWT4pQFs4MSwgODhdICg8L0JPRFk+KQotLS0tLSN0ZXh0KFxyXG4pQFs4OCwgOTBdIChcclxuKQotLS0jdGV4dChcclxuKUBbOTcsIDk5XSAoXHJcbikKLQotU291cmNlIDoKLTxIVE1MPgotPEhFQUQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4KLTx0aXRsZT48L3RpdGxlPjwvSEVBRD4KLTxCT0RZPjwvQk9EWT4KLTwvSFRNTD4KLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPEhUTUw+KQotWzYsIDhdICgKLSkKLVs4LCAxNF0gKDxIRUFEPikKLVsxNCwgMTZdICgKLSkKLVsxNiwgNjRdICg8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4pCi1bNjQsIDY2XSAoCi0pCi1bNjYsIDczXSAoPHRpdGxlPikKLVs3MywgODFdICg8L3RpdGxlPikKLVs4MSwgODhdICg8L0hFQUQ+KQotWzg4LCA5MF0gKAotKQotWzkwLCA5Nl0gKDxCT0RZPikKLVs5NiwgMTAzXSAoPC9CT0RZPikKLVsxMDMsIDEwNV0gKAotKQotWzEwNSwgMTEyXSAoPC9IVE1MPikKLVsxMTIsIDExNF0gKAotKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1ML0hUTUxAWzAsIDZdICg8SFRNTD4pQFsxMDUsIDExMl0gKDwvSFRNTD4pCi0tLS0tI3RleHQoXHJcbilAWzYsIDhdIChcclxuKQotLS0tLUhFQUQvSEVBREBbOCwgMTRdICg8SEVBRD4pQFs4MSwgODhdICg8L0hFQUQ+KQotLS0tLS0tI3RleHQoXHJcbilAWzE0LCAxNl0gKFxyXG4pCi0tLS0tLS1tZXRhQFsxNiwgNjRdICg8bWV0YSBuYW1lJiM2MTsiR0VORVJBVE9SIiBjb250ZW50JiM2MTsiVXBkYXRlciBUZXN0IDIiPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFs2NCwgNjZdIChcclxuKQotLS0tLS0tdGl0bGUvdGl0bGVAWzY2LCA3M10gKDx0aXRsZT4pQFs3MywgODFdICg8L3RpdGxlPikKLS0tLS0tLS0tI3RleHQoKQotLS0tLSN0ZXh0KFxyXG4pQFs4OCwgOTBdIChcclxuKQotLS0tLUJPRFkvQk9EWUBbOTAsIDk2XSAoPEJPRFk+KUBbOTYsIDEwM10gKDwvQk9EWT4pCi0tLS0tI3RleHQoXHJcbilAWzEwMywgMTA1XSAoXHJcbikKLS0tI3RleHQoXHJcbilAWzExMiwgMTE0XSAoXHJcbikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWM3M2E1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MwotU291cmNlIDoKLTxhPjxiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNl0gKDxiPikKLVs2LCAxMF0gKDwvYj4pCi1bMTAsIDE0XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTAsIDE0XSAoPC9hPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs2LCAxMF0gKDwvYj4pCi0KLVNvdXJjZSA6Ci08YT4KLTxiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDddICg8Yj4pCi1bNywgMTFdICg8L2I+KQotWzExLCAxNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzExLCAxNV0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYi9iQFs0LCA3XSAoPGI+KUBbNywgMTFdICg8L2I+KQotCi1Tb3VyY2UgOgotPGE+Ci08Yj48L2I+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDddICg8Yj4pCi1bNywgMTFdICg8L2I+KQotWzExLCAxMl0gKAotKQotWzEyLCAxNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzEyLCAxNl0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYi9iQFs0LCA3XSAoPGI+KUBbNywgMTFdICg8L2I+KQotLS0tLSN0ZXh0KFxuKUBbMTEsIDEyXSAoXG4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEwZDAyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQKLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlMTNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUKLVNvdXJjZSA6Ci08YT4mYXBvczs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKCZhcG9zOykKLVs5LCAxM10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzksIDEzXSAoPC9hPikKLS0tLS0jdGV4dCgnKUBbMywgOV0gKCZhcG9zOykKLQotU291cmNlIDoKLTxhPiZhcG9zOzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoJmFwb3M7KQotWzksIDEzXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbOSwgMTNdICg8L2E+KQotLS0tLSN0ZXh0KCcpQFszLCA5XSAoJmFwb3M7KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ni50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ni50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzRkN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2Ci1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLQotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjRhNDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NwotU291cmNlIDoKLTxQPjxCPjwvQj48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgNl0gKDxCPikKLVs2LCAxMF0gKDwvQj4pCi1bMTAsIDE0XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMTAsIDE0XSAoPC9QPikKLS0tLS1CL0JAWzMsIDZdICg8Qj4pQFs2LCAxMF0gKDwvQj4pCi0KLVNvdXJjZSA6Ci08UD48Qj48L0I+PEI+PC9CPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA2XSAoPEI+KQotWzYsIDEwXSAoPC9CPikKLVsxMCwgMTNdICg8Qj4pCi1bMTMsIDE3XSAoPC9CPikKLVsxNywgMjFdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFsxNywgMjFdICg8L1A+KQotLS0tLUIvQkBbMywgNl0gKDxCPilAWzYsIDEwXSAoPC9CPikKLS0tLS1CL0JAWzEwLCAxM10gKDxCPilAWzEzLCAxN10gKDwvQj4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmNmUzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgKLVNvdXJjZSA6Ci08UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgN10gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzMsIDddICg8L1A+KQotCi1Tb3VyY2UgOgotPFA+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA3XSAoPC9QPikKLVs3LCAxMF0gKDxQPikKLVsxMCwgMTRdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFszLCA3XSAoPC9QPikKLS0tUC9QQFs3LCAxMF0gKDxQPilAWzEwLCAxNF0gKDwvUD4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0YThhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkKLVNvdXJjZSA6Ci08c3R5bGU+PC9zdHlsZT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgN10gKDxzdHlsZT4pCi1bNywgMTVdICg8L3N0eWxlPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tc3R5bGUvc3R5bGVAWzAsIDddICg8c3R5bGU+KUBbNywgMTVdICg8L3N0eWxlPikKLQotU291cmNlIDoKLTxzdHlsZT5wPC9zdHlsZT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgN10gKDxzdHlsZT4pCi1bNywgOF0gKHApCi1bOCwgMTZdICg8L3N0eWxlPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tc3R5bGUvc3R5bGVAWzAsIDddICg8c3R5bGU+KUBbOCwgMTZdICg8L3N0eWxlPikKLS0tLS0jdGV4dChwKUBbNywgOF0gKHApCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYU5vdGVPblBhcnNlclJlc3VsdHNEaXJlY3Rvcmllcy50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2FOb3RlT25QYXJzZXJSZXN1bHRzRGlyZWN0b3JpZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI0MTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYU5vdGVPblBhcnNlclJlc3VsdHNEaXJlY3Rvcmllcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1UaGVzZSBub3RlcyBwZXJ0YWluIHRvIHRoZSB2MjAwNDEyMTBfMjMwMCB2ZXJzaW9uIAotaW4gQ1ZTIHJlcG9zaXRvcnkuIAotCi1Ob3RlLCB0aGUgIjA1LTI0IiBkaXJlY3RvcnkgKnNob3VsZCogbWF0Y2gKLXRoZSBwYXJzZXIgcmVzdWx0cyBmcm9tIHBhcnNlciBvZiBzYW1lIGRhdGUsIAotKmJ1dCogYWZ0ZXIgdHJhbnNpdGlvbiB0byBvcmcuZWNsaXBzZSwgaXQgc2VlbXMgCi10aGUgY2FzZSBvZiB0YWdzIGlzIGRpZmZlcmVudC4gT2RkbHksIHNlZW1zIAotbGlrZSB0aGUgY3VycmVudCB0cmVhdGVtZW50IG9mIGNhc2UgaXMgY29ycmVjdCwgCi1zbyAuLi4gMTItMTAgcGFyc2VyIHJlc3VsdHMgc2hvdWxkIGJlIHVzZWQgYXMgCi1yZWZlcmVuY2UsIHVubGVzcyBzb21lIG5ldyBpbnNpZ2h0IGlzIGdhaW5lZC4gCi1JdCBkb2VzIG1hdGNoIHByZXZpb3VzIHZlcnNpb24gZXhjZXB0IGZvciBjYXNlLiAKLShBbmQsIHRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyBjaGFuZ2VkICJieSBoYW5kIiAKLXRvIGFjY29taWRhdGUgdGhlIHRyYW5zaXRpb24gdG8gb3JnLmVjbGlwc2UpLiAKLQotVE9ETzogdGhpcyBmaWxlLCBhbmQgMDUtMjQgcmVmZXJlbmNlIGRpcmVjdG9yeQotY2FuIGJlIGRlbGV0ZWQgYXJvdW5kIE0zLCBvbmNlIHdob2xlIHRlYW0gaGFzIAotcmV2aWV3ZWQgYW5kIGNvbmZpZGVudCAxMi0xMCB2ZXJzaW9uIGlzIGNvcnJlY3QKLXJlZmVyZW5jZS4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGUxMmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5odG1sY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sY29yZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGh0bWxjb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIFBhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOTI3YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IEhUTUwgQ29yZSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1NTY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5jbGVhbnVwLlRlc3RIVE1MQ2xlYW51cFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLmZvcm1hdC5UZXN0Rm9ybWF0UHJvY2Vzc29ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLmZvcm1hdC5UZXN0Rm9ybWF0VXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLmh0bWw1Lm1vZGVsLkhUTUw1Q29udGVudE1vZGVsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2MuSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjLkhUTUxUYWdJbmZvVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLkJVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuR2V0T3ZlcnJpZGVTdHlsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5Nb2RlbE1vZGlmaWNhdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5UZXN0Q1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdENhdGFsb2dDb250ZW50TW9kZWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdEZvck5QRUluQ1NTQ3JlYXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgSFRNTENvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLyoqCi0JICogdG8gZ2V0IHBpY2tlZCB1cCBieSBCVlQKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxDb3JlVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEhUTUxDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBDb3JlIFRlc3RTdWl0ZSIpOwotCi0JCWFkZFRlc3QoTW9kZWxQYXJzZXJUZXN0cy5zdWl0ZSgpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDU1MuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MVGFnSW5mb1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1vZGVsTW9kaWZpY2F0aW9ucy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEdldE92ZXJyaWRlU3R5bGVUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShCVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEZvcm1hdFByb2Nlc3NvckhUTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RGb3JtYXRVdGlsaXR5LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuY2xhc3MpKTsKLQkJYWRkVGVzdChUZXN0SFRNTENsZWFudXBQcm9jZXNzb3Iuc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MNUNvbnRlbnRNb2RlbFRlc3QuY2xhc3MpKTsKLQkJCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzN2MwMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MQ29yZVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSFRNTENvcmVUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLlNTRU1vZGVsSFRNTFRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBIVE1MQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBIVE1MQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0MjM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTW9kZWxQYXJzZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNjM5NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJWYWx1ZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5PbWlzc2libGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDk7Ci0KLQotCi1wdWJsaWMgY2xhc3MgTW9kZWxQYXJzZXJUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE1vZGVsUGFyc2VyVGVzdHMoKTsKLQl9Ci0KLQlwdWJsaWMgTW9kZWxQYXJzZXJUZXN0cygpIHsKLQkJc3VwZXIoIk1vZGVsUGFyc2VyVGVzdHMiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdC5jbGFzcywgIlBhcnNlclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcywgIlBhcnNlclRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MsICJQYXJzZXJUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzLCAiUGFyc2VyVGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcywgIlVwZGF0ZXJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzLCAiVXBkYXRlclRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QzLmNsYXNzLCAiVXBkYXRlclRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q0LmNsYXNzLCAiVXBkYXRlclRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzLCAiVXBkYXRlclRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q2LmNsYXNzLCAiVXBkYXRlclRlc3Q2IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q3LmNsYXNzLCAiVXBkYXRlclRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzLCAiVXBkYXRlclRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q5LmNsYXNzLCAiVXBkYXRlclRlc3Q5IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMC5jbGFzcywgIlVwZGF0ZXJUZXN0MTAiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDExLmNsYXNzLCAiVXBkYXRlclRlc3QxMSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MsICJVcGRhdGVyVGVzdDEyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMy5jbGFzcywgIlVwZGF0ZXJUZXN0MTMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDE0LmNsYXNzLCAiVXBkYXRlclRlc3QxNCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzLCAiRWxlbWVudFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MsICJFbGVtZW50VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdDMuY2xhc3MsICJFbGVtZW50VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUYWJsZVRlc3QuY2xhc3MsICJUYWJsZVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcywgIlRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzLCAiVGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QzLmNsYXNzLCAiVGV4dFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdC5jbGFzcywgIlNwbGl0VGV4dFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Mi5jbGFzcywgIlNwbGl0VGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDMuY2xhc3MsICJTcGxpdFRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q0LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0NS5jbGFzcywgIlNwbGl0VGV4dFRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDYuY2xhc3MsICJTcGxpdFRleHRUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q3LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDciKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0OC5jbGFzcywgIlNwbGl0VGV4dFRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdC5jbGFzcywgIkVtcHR5VGV4dFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcywgIkVtcHR5VGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MsICJFbXB0eVRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzLCAiQXR0clRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MsICJBdHRyVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRyVmFsdWVUZXN0LmNsYXNzLCAiQXR0clZhbHVlVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MsICJFbnRpdHlUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDIuY2xhc3MsICJFbnRpdHlUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3QzLmNsYXNzLCAiRW50aXR5VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0NC5jbGFzcywgIkVudGl0eVRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDUuY2xhc3MsICJFbnRpdHlUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q2LmNsYXNzLCAiRW50aXR5VGVzdDYiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0Ny5jbGFzcywgIkVudGl0eVRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDguY2xhc3MsICJFbnRpdHlUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q5LmNsYXNzLCAiRW50aXR5VGVzdDkiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShEb2NUeXBlVGVzdC5jbGFzcywgIkRvY1R5cGVUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdC5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0Mi5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdDMuY2xhc3MsICJDREFUQVNlY3Rpb25UZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3Q0LmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQSVRlc3QuY2xhc3MsICJQSVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShPbWlzc2libGVUZXN0LmNsYXNzLCAiT21pc3NpYmxlIHRhZ3MgdGVzdCIpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxNzExNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLQotLyoqCi0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkKLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gSFRNTENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQl9Ci0JfQotCQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEhUTUxDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9jbGVhbnVwL1Rlc3RIVE1MQ2xlYW51cFByb2Nlc3Nvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9jbGVhbnVwL1Rlc3RIVE1MQ2xlYW51cFByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGI5YTEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvY2xlYW51cC9UZXN0SFRNTENsZWFudXBQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5jbGVhbnVwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotCi1wdWJsaWMgY2xhc3MgVGVzdEhUTUxDbGVhbnVwUHJvY2Vzc29yIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0SFRNTENsZWFudXBQcm9jZXNzb3IiOwotCQotCS8qKgotCSAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcwotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL0hUTUxDbGVhbnVwUHJvY2Vzc29yIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBUZXN0SFRNTENsZWFudXBQcm9jZXNzb3IoKSB7Ci0JCXN1cGVyKCJUZXN0IEhUTUwgQ2xlYW51cCBQcm9jZXNzb3IiKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqLwotCXB1YmxpYyBUZXN0SFRNTENsZWFudXBQcm9jZXNzb3IoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlVzZSB0aGlzIG1ldGhvZCB0byBhZGQgdGhlc2UgdGVzdHMgdG8gYSBsYXJnZXIgdGVzdCBzdWl0ZSBzbyBzZXQgdXAKLQkgKiBhbmQgdGVhciBkb3duIGNhbiBiZSBwZXJmb3JtZWQ8L3A+Ci0JICogCi0JICogQHJldHVybiBhIHtAbGluayBUZXN0U2V0dXB9IHRoYXQgd2lsbCBydW4gYWxsIG9mIHRoZSB0ZXN0cyBpbiB0aGlzIGNsYXNzCi0JICogd2l0aCBzZXQgdXAgYW5kIHRlYXIgZG93bi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSB0cyA9IG5ldyBUZXN0U3VpdGUoVGVzdEhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsYXNzKTsKLQkJcmV0dXJuIG5ldyBUZXN0SFRNTENsZWFudXBQcm9jZXNzb3JTZXR1cCh0cyk7Ci0KLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IGNvbGxhcHNpbmcgZW1wdHkgdGFncyBpbiBhbiBodG1sIGRvY3VtZW50PC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb2xsYXBzZUVtcHR5VGFnc0hUTUwoKXRocm93cyBFeGNlcHRpb24gIHsKLQkJSFRNTENsZWFudXBQcm9jZXNzb3JJbXBsIGNsZWFudXBQcm9jZXNzb3IgPSBnZXRQcm9jZXNzb3JGb3JGb3JFbXB0eVRhZ3NUZXN0KCk7Ci0JCXJ1blRlc3QoInRlc3QxLmh0bWwiLCAidGVzdDEtZXhwZWN0ZWQuaHRtbCIsIGNsZWFudXBQcm9jZXNzb3IpOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gY29sbGFwc2luZyBlbXB0eSB0YWdzIGluIGFuIHhodG1sIGRvY3VtZW50PC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb2xsYXBzZUVtcHR5VGFnc1hIVE1MKCl0aHJvd3MgRXhjZXB0aW9uICB7Ci0JCUhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbCBjbGVhbnVwUHJvY2Vzc29yID0gZ2V0UHJvY2Vzc29yRm9yRm9yRW1wdHlUYWdzVGVzdCgpOwotCQlydW5UZXN0KCJ0ZXN0Mi5odG1sIiwgInRlc3QyLWV4cGVjdGVkLmh0bWwiLCBjbGVhbnVwUHJvY2Vzc29yKTsKLQl9Ci0JCi0JLyoqCi0JICogQHJldHVybiBhIGNvbmZpZ3VyZWQge0BsaW5rIEhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbH0gZm9yIHRlc3RpbmcgY29tcHJlc3NpbmcgZW1wdHkgdGFncwotCSAqLwotCXByaXZhdGUgc3RhdGljIEhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbCBnZXRQcm9jZXNzb3JGb3JGb3JFbXB0eVRhZ3NUZXN0KCkgewotCQlIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwgY2xlYW51cFByb2Nlc3NvciA9IG5ldyBIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwoKTsKLQkJY2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKS5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCkuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCkuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCkuc2V0UXVvdGVBdHRyVmFsdWVzKGZhbHNlKTsKLQkJY2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKS5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0JCQotCQlyZXR1cm4gY2xlYW51cFByb2Nlc3NvcjsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UnVucyBhbiB7QGxpbmsgQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3Nvcn0gdGVzdDwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gb3JpZ2luYWxGaWxlIGZpbGUgdG8gY2xlYW4gdXAKLQkgKiBAcGFyYW0gZXhwZWN0ZWRSZXN1bHRzRmlsZSBleHBlY3RlZCByZXN1bHRzIG9mIGNsZWFuaW5nIHVwIHRoZSBvcmlnaW5hbCBmaWxlCi0JICogQHBhcmFtIGNvbmZpZ3VyZWRDbGVhbnVwUHJvY2Vzc29yIHRoZSBwcm9jZXNzb3IgdG8gdXNlIHRvIGRvIHRoZSBjbGVhbmluZwotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uIHRlc3RzIGNhbiB0aHJvdyBleGNlcHRpb25zIG5vdyBhbmQgdGhlbgotCSAqLwotCXByaXZhdGUgdm9pZCBydW5UZXN0KFN0cmluZyBvcmlnaW5hbEZpbGUsIFN0cmluZyBleHBlY3RlZFJlc3VsdHNGaWxlLAotCQkJQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvciBjb25maWd1cmVkQ2xlYW51cFByb2Nlc3NvcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBleHBlY3RlZE1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KG9yaWdpbmFsRmlsZSk7Ci0JCQlleHBlY3RlZE1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGV4cGVjdGVkUmVzdWx0c0ZpbGUpOwotCQkJCi0JCQljb25maWd1cmVkQ2xlYW51cFByb2Nlc3Nvci5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQljb25maWd1cmVkQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwobW9kZWwpOwotCQkJY29uZmlndXJlZENsZWFudXBQcm9jZXNzb3IucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0JCQkKLQkJCW1vZGVsLnNhdmUoKTsKLQkJCQotCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7Ci0JCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGV4cGVjdGVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoIkNsZWFuIHVwIHJlc3VsdHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByZXN1bHRzIiwKLQkJCQkJZXhwZWN0ZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSwKLQkJCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCQl9IGZpbmFsbHkgewotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQkJCi0JCQlpZihleHBlY3RlZE1vZGVsICE9IG51bGwpIHsKLQkJCQlleHBlY3RlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYSBtb2RlbAotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBvciBpdCBjYW4ndCBnZXQgdGhlIG1vZGVsIHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKGZpbGVuYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyBmaWxlICsgIiBjYW4gbm90IGJlIGZvdW5kIiwgZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBnZXQgbW9kZWwgZm9yICIgKyBmaWxlLCBtb2RlbCk7Ci0JCQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhJRG9jdW1lbnQgZG9jKSB7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvYy5nZXQoKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcciIsICJcbiIpOwotCQlkb2Muc2V0KGNvbnRlbnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciAocmVzcGVjdGl2ZWx5KSBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEhUTUxDbGVhbnVwUHJvY2Vzc29yU2V0dXAgZXh0ZW5kcyBUZXN0U2V0dXAgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JCXByaXZhdGUgc3RhdGljIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCQkKLQkJLyoqCi0JCSAqIERlZmF1bHQgY29uc3RydWN0b3IKLQkJICogCi0JCSAqIEBwYXJhbSB0ZXN0IGRvIHNldHVwIGZvciB0aGUgZ2l2ZW4gdGVzdAotCQkgKi8KLQkJcHVibGljIFRlc3RIVE1MQ2xlYW51cFByb2Nlc3NvclNldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBub25pbnRlcmFjdGl2ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29ySFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRmMmE0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29ySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgRWNsaXBzZSBGb3VuZGF0aW9uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE34bGxlciAtIGplc3BlckBzZWxza2FiZXQub3JnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmZvcm1hdC5IVE1MRm9ybWF0UHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LlN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLQotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JIVE1MIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBTUExJVF9NVUxUSV9BVFRSUyA9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOREVOVCA9ICJcdCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIENMRUFSX0FMTF9CTEFOS19MSU5FUyA9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9MSU5FX1dJRFRIID0gNzI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGXzggPSAiVVRGLTgiOwotCi0JcHJpdmF0ZSBTdHJpbmdDb21wYXJlVXRpbCBmU3RyaW5nQ29tcGFyZVV0aWw7Ci0KLQlwdWJsaWMgVGVzdEZvcm1hdFByb2Nlc3NvckhUTUwoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCBmb3JtYXRQcm9jZXNzb3I7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmb3JtYXRQcm9jZXNzb3IgPSBuZXcgSFRNTEZvcm1hdFByb2Nlc3NvckltcGwoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlLCAxKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHJlc2V0UHJlZmVyZW5jZXMsIDEpOwotCX0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMsIGludCBmb3JtYXRDeWNsZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWlmIChyZXNldFByZWZlcmVuY2VzKQotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQlmb3IoaW50IGk9MDsgaSA8IGZvcm1hdEN5Y2xlczsgaSsrKQotCQkJewotCQkJCWZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChiZWZvcmVNb2RlbCk7Ci0JCQl9Ci0JCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZm9ybWF0dGVkQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGZvcm1hdHRlZEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgZm9ybWF0dGVyCi0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBhZnRlckJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYWZ0ZXJNb2RlbC5zYXZlKGFmdGVyQnl0ZXMpOwotCi0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgYWN0dWFsQ29udGVudHMgPSBuZXcgU3RyaW5nKGZvcm1hdHRlZEJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCWFzc2VydFRydWUoIkZvcm1hdHRlZCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkLlxuRXhwZWN0ZWQgQ29udGVudHM6XG4iICsgZXhwZWN0ZWRDb250ZW50cyArICJcbkFjdHVhbCBDb250ZW50czpcbiIgKyBhY3R1YWxDb250ZW50cywgZlN0cmluZ0NvbXBhcmVVdGlsLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoZXhwZWN0ZWRDb250ZW50cywgYWN0dWFsQ29udGVudHMpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChiZWZvcmVNb2RlbCAhPSBudWxsKQotCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkKLQkJCQlhZnRlck1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKE1BWF9MSU5FX1dJRFRIKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKENMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudChJTkRFTlQpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhTUExJVF9NVUxUSV9BVFRSUyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRhYmxlRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvaHRtbC90YWJsZWZvcm1hdC5odG1sIiwgInRlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0LWZtdC5odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljRm9ybWF0dGluZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRlc3QgdGhhdCB0aGUgYmFzaWMgZWxlbWVudHMgb2YgSFRNTCBhcmUgcHJvcGVybHkgYWxpZ25lZC4gRG9uJ3QgaW5kZW50IGNoaWxkcmVuIG9mIDxodG1sPiBvciA8aGVhZD4KLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtYmFzaWMuaHRtbCIsICJ0ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtYmFzaWMtZm10Lmh0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkRGl2cygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRlc3QgdGhhdCB0aGUgYmFzaWMgZWxlbWVudHMgb2YgSFRNTCBhcmUgcHJvcGVybHkgYWxpZ25lZC4gRG9uJ3QgaW5kZW50IGNoaWxkcmVuIG9mIDxodG1sPiBvciA8aGVhZD4KLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtZGl2cy5odG1sIiwgInRlc3RmaWxlcy9odG1sL2Zvcm1hdC1kaXZzLWZtdC5odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkQ1NTRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHOTI5NTcKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvaHRtbC9odG1sd2l0aGNzcy5odG1sIiwgInRlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLWZtdC5odG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRBbGlnbkVuZEJyYWNrZXQodHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC5odG1sIiwgInRlc3RmaWxlcy9odG1sL2F0dHJpYnV0ZXNmb3JtYXQtZm10Lmh0bWwiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTY3JpcHRGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvL0JVRzEyODgxMwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9odG1sL3NjcmlwdGZvcm1hdC5odG1sIiwgInRlc3RmaWxlcy9odG1sL3NjcmlwdGZvcm1hdC1mbXQuaHRtbCIsIHRydWUsIDMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRVdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0VXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmEyYzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRVdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5mb3JtYXQuSFRNTEZvcm1hdHRpbmdVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRVdGlsaXR5IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdElubGluZURlZmF1bHRzKCkgewotCQlPYmplY3RbXSBkZWZhdWx0RWxlbWVudHMgPSBIVE1MRm9ybWF0dGluZ1V0aWwuZ2V0RGVmYXVsdElubGluZUVsZW1lbnRzKCk7Ci0JCWFzc2VydE5vdE51bGwoIkRlZmF1bHQgZWxlbWVudHMgY2Fubm90IGJlIG51bGwiLCBkZWZhdWx0RWxlbWVudHMpOwotCQlhc3NlcnRUcnVlKCJEZWZhdWx0IGVsZW1lbnQgbGlzdCBoYXMgbm8gZWxlbWVudHMiLCBkZWZhdWx0RWxlbWVudHMubGVuZ3RoID4gMCk7Ci0KLQkJT2JqZWN0W10gZWxlbWVudHMgPSBIVE1MRm9ybWF0dGluZ1V0aWwuZ2V0SW5saW5lRWxlbWVudHMoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBudWxsIiwgZWxlbWVudHMpOwotCQlhc3NlcnRUcnVlKCJJbmxpbmUgZWxlbWVudHMgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCIsIGVsZW1lbnRzLmxlbmd0aCA9PSBkZWZhdWx0RWxlbWVudHMubGVuZ3RoKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIkVsZW1lbnQgZG9lcyBub3QgbWF0Y2ggdXAgd2l0aCBkZWZhdWx0IGxpc3QiLCBkZWZhdWx0RWxlbWVudHNbaV0sIGVsZW1lbnRzW2ldKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbmxpbmVOb2RlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlIVE1MRm9ybWF0dGluZ1V0aWwgdXRpbCA9IG5ldyBIVE1MRm9ybWF0dGluZ1V0aWwoKTsKLQkJYXNzZXJ0VHJ1ZSgiQW5jaG9yIHRhZyBtdXN0IGJlIGlubGluZSIsIHV0aWwuaXNJbmxpbmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoIkRpdiB0YWcgbXVzdCBub3QgYmUgaW5saW5lIiwgdXRpbC5pc0lubGluZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkpOwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RXhwb3J0RWxlbWVudHMoKSB7Ci0JCVN0cmluZ1tdIG5ld0VsZW1lbnRzID0geyAiZm9vIiB9OwotCQlIVE1MRm9ybWF0dGluZ1V0aWwuZXhwb3J0VG9QcmVmZXJlbmNlcyhuZXdFbGVtZW50cyk7Ci0KLQkJT2JqZWN0W10gZWxlbWVudHMgPSBIVE1MRm9ybWF0dGluZ1V0aWwuZ2V0SW5saW5lRWxlbWVudHMoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBudWxsIiwgZWxlbWVudHMpOwotCQlhc3NlcnRFcXVhbHMoIklubGluZSBjb3VudCBpcyB3cm9uZyIsIG5ld0VsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdFbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJFbGVtZW50IG5hbWVzIGRvIG5vdCBtYXRjaCB1cCIsIG5ld0VsZW1lbnRzW2ldLCBlbGVtZW50c1tpXSk7Ci0JCX0KLQotCQlIVE1MRm9ybWF0dGluZ1V0aWwuZXhwb3J0VG9QcmVmZXJlbmNlcyhIVE1MRm9ybWF0dGluZ1V0aWwuZ2V0RGVmYXVsdElubGluZUVsZW1lbnRzKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2F0dHJpYnV0ZXNmb3JtYXQtZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Mzk5ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhCi0JaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIgotCWNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCTxwCi0JCWFsaWduPSJjZW50ZXIiCi0JCWlkPSJteXAiCi0JPgotCQlIZXJlIGlzIHNvbWUgdGV4dCB0aGF0IEkgYW0gd3JpdGluZy4KLQk8L3A+Ci0JPGJyCi0JCWlkPSJteWJyIgotCQl0aXRsZT0ibm90aXRsZSIKLQkvPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2F0dHJpYnV0ZXNmb3JtYXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2F0dHJpYnV0ZXNmb3JtYXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwMGU4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9hdHRyaWJ1dGVzZm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwIGFsaWduPSJjZW50ZXIiIGlkPSJteXAiPkhlcmUgaXMgc29tZSB0ZXh0IHRoYXQgSSBhbSB3cml0aW5nLjwvcD48YnIgaWQ9Im15YnIiIHRpdGxlPSJub3RpdGxlIi8+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvZm9ybWF0LWJhc2ljLWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvZm9ybWF0LWJhc2ljLWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUxMzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2Zvcm1hdC1iYXNpYy1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxsaW5rIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPHRpdGxlPkZvb2JhcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQk8ZGl2PjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2Zvcm1hdC1iYXNpYy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvZm9ybWF0LWJhc2ljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWQwNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvZm9ybWF0LWJhc2ljLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci0JPGxpbmsgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci0JPHRpdGxlPkZvb2JhcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXY+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvZm9ybWF0LWRpdnMtZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtZGl2cy1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViNWUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtZGl2cy1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQk8ZGl2PgotCQk8ZGl2PgotCQkJPGRpdj4KLQkJCQk8ZGl2PgotCQkJCQk8ZGl2PgotCQkJCQkJPGEgaHJlZj0iaW5kZXguaHRtbCI+SW5kZXg8L2E+Ci0JCQkJCTwvZGl2PgotCQkJCTwvZGl2PgotCQkJPC9kaXY+Ci0JCTwvZGl2PgotCTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2Zvcm1hdC1kaXZzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9mb3JtYXQtZGl2cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2ZjZTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2Zvcm1hdC1kaXZzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48YSBocmVmPSJpbmRleC5odG1sIj5JbmRleDwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9odG1sd2l0aGNzcy1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmNlNjlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLTwhLS0KLWJvZHkgewotCWJhY2tncm91bmQtY29sb3I6IGJsYWNrOwotCWNvbG9yOiB3aGl0ZTsKLX0KLQotYTpsaW5rLGE6dmlzaXRlZCxhOmFjdGl2ZSB7Ci0JY29sb3I6IHJlZDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmUKLX0KLQotYTpob3ZlciB7Ci0JY29sb3I6IHJlZDsKLQlmb250LXdlaWdodDogYm9sZAotfQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotPGJvZHk+Ci0JPGEgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnIj5oZWxsbyBlY2xpcHNlLjwvYT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9odG1sd2l0aGNzcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWVmMzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPgotPCEtLQotYm9keSB7CWJhY2tncm91bmQtY29sb3I6IGJsYWNrOwotCWNvbG9yOiB3aGl0ZTt9Ci1hOmxpbmssYTp2aXNpdGVkLGE6YWN0aXZlIHsJY29sb3I6IHJlZDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmV9Ci1hOmhvdmVyIHsKLQljb2xvcjogcmVkOwlmb250LXdlaWdodDogYm9sZAotfQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotPGJvZHk+Ci08YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmciPmhlbGxvIGVjbGlwc2UuPC9hPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvc2NyaXB0Zm9ybWF0LWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvc2NyaXB0Zm9ybWF0LWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzJiZmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3NjcmlwdGZvcm1hdC1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08aHRtbD4KLTxoZWFkPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLWgxIHsKLQljb2xvcjogcmVkCi19Ci0KLWgzIHsKLQljb2xvcjogYmx1ZQotfQotPC9zdHlsZT4KLTwvaGVhZD4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9zY3JpcHRmb3JtYXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3NjcmlwdGZvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjQyMzQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3NjcmlwdGZvcm1hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLz4gPGh0bWw+PGhlYWQ+PHN0eWxlIHR5cGU9InRleHQvY3NzIj5oMSB7Y29sb3I6IHJlZH1oMyB7Y29sb3I6IGJsdWV9PC9zdHlsZT48L2hlYWQ+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0LWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvdGFibGVmb3JtYXQtZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NjkxNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvdGFibGVmb3JtYXQtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQk8dGFibGU+Ci0JCTx0cj4KLQkJCTx0aD5Db2x1bW4gMSBIZWFkaW5nPC90aD4KLQkJCTx0aD5Db2x1bW4gMiBIZWFkaW5nPC90aD4KLQkJPC90cj4KLQkJPHRyPgotCQkJPHRkPlJvdyAxOiBDb2wgMTwvdGQ+Ci0JCQk8dGQ+Um93IDE6IENvbCAyPC90ZD4KLQkJPC90cj4KLQk8L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC90YWJsZWZvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGVmNTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTx0YWJsZT4gIDx0cj4gICAgPHRoPkNvbHVtbiAxIEhlYWRpbmc8L3RoPiAgICA8dGg+Q29sdW1uIDIgSGVhZGluZzwvdGg+ICA8L3RyPiAgPHRyPiAgICA8dGQ+Um93IDE6IENvbCAxPC90ZD4gICAgPHRkPlJvdyAxOiBDb2wgMjwvdGQ+ICA8L3RyPgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2h0bWw1L21vZGVsL0hUTUw1Q29udGVudE1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9odG1sNS9tb2RlbC9IVE1MNUNvbnRlbnRNb2RlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2OGZkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2h0bWw1L21vZGVsL0hUTUw1Q29udGVudE1vZGVsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLmh0bWw1Lm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuSFRNTDVBdHRyaWJ1dGVDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkhUTUxDTURvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkhUTUw0ME5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkhUTUw1ME5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudG1vZGVsLkNNRG9jVHlwZTsKLQotcHVibGljIGNsYXNzIEhUTUw1Q29udGVudE1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBIVE1MNUNvbnRlbnRNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNtX2RvY190eXBlCi0JICogQHBhcmFtIGVsZW1lbnROYW1lCi0JICogQHBhcmFtIGF0dHJOYW1lSW1wb3J0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQXR0ck5hbWVzKFN0cmluZyBkb2N1bWVudEtleSwgU3RyaW5nIGVsZW1lbnROYW1lLCBTdHJpbmdbXSBhdHRyTmFtZXMpIHsKLQkJQ01Eb2N1bWVudCBkb2N1bWVudCA9IEhUTUxDTURvY3VtZW50RmFjdG9yeS5nZXRDTURvY3VtZW50KGRvY3VtZW50S2V5KTsKLQkJQ01Ob2RlIGVsZW1lbnREZWNsYXJhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCkuZ2V0TmFtZWRJdGVtKGVsZW1lbnROYW1lKTsKLQkJYXNzZXJ0RXF1YWxzKCJub3QgYW4gZWxlbWVudCBkZWNsYXJhdGlvbjoiICsgZWxlbWVudERlY2xhcmF0aW9uLCBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiwgZWxlbWVudERlY2xhcmF0aW9uLmdldE5vZGVUeXBlKCkpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIGVsZW1lbnQgZGVjbGFyYXRpb246IiArIGVsZW1lbnROYW1lLCBlbGVtZW50RGVjbGFyYXRpb24pOwotCQkKLQkJQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnREZWNsYXJhdGlvbikuZ2V0QXR0cmlidXRlcygpOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgYXR0cmlidXRlIGRlY2xhcmF0aW9uOiIgKyBhdHRyTmFtZXNbaV0gKyAiIGZvciBlbGVtZW50OiAiICsgZWxlbWVudE5hbWUsIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dHJOYW1lc1tpXSkpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiQXR0cmlidXRlcyBkZWZpbmVkIGluIGNvbnRlbnQgbW9kZWwgdGhhdCBhcmUgbm90IGV4cGVjdGVkIGJ5IHRoZSB0ZXN0IGZvciBlbGVtZW50OiAiICsgZWxlbWVudE5hbWUsIGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCksIGF0dHJOYW1lcy5sZW5ndGgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0RvY3VtZW50KE9iamVjdCBkb2N1bWVudEtleSkgewotCQlDTURvY3VtZW50IGRvY3VtZW50ID0gSFRNTENNRG9jdW1lbnRGYWN0b3J5LmdldENNRG9jdW1lbnQoZG9jdW1lbnRLZXkudG9TdHJpbmcoKSk7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgZG9jOiIgKyBkb2N1bWVudEtleS50b1N0cmluZygpLCBkb2N1bWVudCk7Ci0JCUNNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlDTU5vZGUgaXRlbSA9IGVsZW1lbnRzLml0ZW0oaSk7Ci0JCQl2ZXJpZnlFbGVtZW50RGVjbGFyYXRpb25IYXNOYW1lKGl0ZW0pOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRNZXJnZWRsaXN0KFN0cmluZ1tdIGxpc3QxLCBTdHJpbmdbXSBsaXN0Mil7Ci0JCQotCQlTdHJpbmdbXSBtZXJnZXJMaXN0ID0gbmV3IFN0cmluZ1tsaXN0MS5sZW5ndGggKyBsaXN0Mi5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGxpc3QxLCAwLCBtZXJnZXJMaXN0LCAwLCBsaXN0MS5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KGxpc3QyLCAwLCBtZXJnZXJMaXN0LCBsaXN0MS5sZW5ndGgsIGxpc3QyLmxlbmd0aCk7Ci0KLQkJcmV0dXJuIG1lcmdlckxpc3Q7Ci0JCQotCX0KLQkKLQlwcml2YXRlIFN0cmluZ1tdIGdldEdsb2JhbExpc3QoKXsKLQkJcmV0dXJuIGdldE1lcmdlZGxpc3QoSFRNTDVBdHRyaWJ1dGVDb2xsZWN0aW9uLmdldEdsb2JhbEF0dHJpYnV0ZUxpc3QoKSwgSFRNTDVBdHRyaWJ1dGVDb2xsZWN0aW9uLmdldEdsb2JhbEV2ZW50TGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1QXJ0aWNsZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuQVJUSUNMRSwgZ2V0R2xvYmFsTGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1QXNpZGUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkFTSURFLCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVBdWRpbygpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuQVVESU8sIGdldE1lcmdlZGxpc3QoZ2V0R2xvYmFsTGlzdCgpLCAKLQkJCQluZXcgU3RyaW5nW117SFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9TUkMsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfUFJFTE9BRCwgSFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9BVVRPUExBWSwKLQkJCUhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfTE9PUCwgSFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9DT05UUk9MU30pKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVDYW52YXMoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkNBTlZBUywgZ2V0TWVyZ2VkbGlzdChnZXRHbG9iYWxMaXN0KCksIAotCQkJCW5ldyBTdHJpbmdbXXtIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX0hFSUdIVCwgSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9XSURUSH0pKTsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNUNvbW1hbmQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkNPTU1BTkQsIGdldE1lcmdlZGxpc3QoZ2V0R2xvYmFsTGlzdCgpLCAKLQkJCQluZXcgU3RyaW5nW117SFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCBIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX0xBQkVMLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0lDT04sCi0JCQlIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX0RJU0FCTEVELCBIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX0NIRUNLRUQsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfUkFESU9HUk9VUH0pKTsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNURhdGFsaXN0KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5EQVRBTElTVCwgZ2V0R2xvYmFsTGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1RGV0YWlscygpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuREVUQUlMUywgZ2V0TWVyZ2VkbGlzdChnZXRHbG9iYWxMaXN0KCksIAotCQkJCW5ldyBTdHJpbmdbXXtIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX09QRU59KSk7Ci0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNUZpZ3VyZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuRklHVVJFLCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVGaWdDYXB0aW9uKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5GSUdDQVBUSU9OLCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVIZWFkZXIoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQURFUiwgZ2V0R2xvYmFsTGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1SEdyb3VwKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IR1JPVVAsIGdldEdsb2JhbExpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNUtleWdlbigpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuS0VZR0VOLCBnZXRNZXJnZWRsaXN0KGdldEdsb2JhbExpc3QoKSwgCi0JCQkJbmV3IFN0cmluZ1tde0hUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfQVVUT0ZPQ1VTLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0NIQUxMRU5HRSwgSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9ESVNBQkxFRCwKLQkJCQlIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0ZPUk0sIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfS0VZVFlQRSwgSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FfSkpOwotCQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVNYXJrKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5NQVJLLCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVNYXRoKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5NQVRILCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVNZXRlcigpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuTUVURVIsIGdldE1lcmdlZGxpc3QoZ2V0R2xvYmFsTGlzdCgpLCAKLQkJCQluZXcgU3RyaW5nW117SFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9NQVgsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfTUlOLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0xPVywKLQkJCQlIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0hJR0gsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfT1BUSU1VTSwgSFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9GT1JNLCBIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBTFVFfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVOYXYoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLk5BViwgZ2V0R2xvYmFsTGlzdCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1T3V0cHV0KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5PVVRQVVQsIGdldE1lcmdlZGxpc3QoZ2V0R2xvYmFsTGlzdCgpLCAKLQkJCQluZXcgU3RyaW5nW117SFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9GT1IsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfRk9STSwgSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FfSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVQcm9ncmVzcygpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUFJPR1JFU1MsIGdldE1lcmdlZGxpc3QoZ2V0R2xvYmFsTGlzdCgpLCAKLQkJCQluZXcgU3RyaW5nW117SFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9WQUxVRSwgSFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9NQVgsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfRk9STX0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1UlQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlJULCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVSUCgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUlAsIGdldEdsb2JhbExpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNVJ1YnkoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlJVQlksIGdldEdsb2JhbExpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNVNlY3Rpb24oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNFQ1RJT04sIGdldEdsb2JhbExpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNVNvdXJjZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuU09VUkNFLCBnZXRNZXJnZWRsaXN0KGdldEdsb2JhbExpc3QoKSwgCi0JCQkJbmV3IFN0cmluZ1tde0hUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfU1JDLCBIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX1RZUEUsIEhUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfTUVESUF9KSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNVN1bW1hcnkoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNVTU1BUlksIGdldEdsb2JhbExpc3QoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25IVE1MNVNWRygpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkhUTUw1X0RPQ19UWVBFLCBIVE1MNTBOYW1lc3BhY2UuRWxlbWVudE5hbWUuU1ZHLCBnZXRHbG9iYWxMaXN0KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSFRNTDVUaW1lKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSFRNTDVfRE9DX1RZUEUsIEhUTUw1ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5USU1FLCBnZXRNZXJnZWRsaXN0KGdldEdsb2JhbExpc3QoKSwgCi0JCQkJbmV3IFN0cmluZ1tde0hUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfREFURVRJTUUsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfUFVCREFURX0pKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkhUTUw1VmlkZW8oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSwgSFRNTDUwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlZJREVPLCBnZXRNZXJnZWRsaXN0KGdldEdsb2JhbExpc3QoKSwgCi0JCQkJbmV3IFN0cmluZ1tde0hUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfU1JDLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX1BSRUxPQUQsIEhUTUw1ME5hbWVzcGFjZS5BVFRSX05BTUVfQVVUT1BMQVksCi0JCQkJSFRNTDUwTmFtZXNwYWNlLkFUVFJfTkFNRV9MT09QLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX0NPTlRST0xTLCBIVE1MNTBOYW1lc3BhY2UuQVRUUl9OQU1FX1BPU1RFUiwgSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9IRUlHSFQsIEhUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfV0lEVEh9KSk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MNWRvY3VtZW50KCkgewotCQljaGVja0RvY3VtZW50KENNRG9jVHlwZS5IVE1MNV9ET0NfVFlQRSk7Ci0JfQotCQotCQotCQotCXByaXZhdGUgdm9pZCB2ZXJpZnlBdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtRGVjbCwgQ01Ob2RlIGF0dHIpIHsKLQkJYXNzZXJ0VHJ1ZShhdHRyLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkFUVFJJQlVURV9ERUNMQVJBVElPTik7Ci0JCWFzc2VydE5vdE51bGwoIm5vIG5hbWUgb24gYW4gYXR0cmlidXRlIGRlY2xhcmF0aW9uIiwgYXR0ci5nZXROb2RlTmFtZSgpKTsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyOwotCQlhc3NlcnROb3ROdWxsKCJubyBhdHRyaWJ1dGUgJ3R5cGUnIG9uIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiAiICsgZWxlbURlY2wuZ2V0Tm9kZU5hbWUoKSArICIvIiArIGF0dHIuZ2V0Tm9kZU5hbWUoKSwgYXR0ckRlY2wuZ2V0QXR0clR5cGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUVsZW1lbnREZWNsYXJhdGlvbkhhc05hbWUoQ01Ob2RlIGl0ZW0pIHsKLQkJYXNzZXJ0VHJ1ZShpdGVtLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkVMRU1FTlRfREVDTEFSQVRJT04pOwotCQlhc3NlcnROb3ROdWxsKCJubyBuYW1lIG9uIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24iLCBpdGVtLmdldE5vZGVOYW1lKCkpOwotCQlDTU5hbWVkTm9kZU1hcCBhdHRycyA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pIGl0ZW0pLmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlDTU5vZGUgYXR0ciA9IGF0dHJzLml0ZW0oaSk7Ci0JCQl2ZXJpZnlBdHRyaWJ1dGVEZWNsYXJhdGlvbigoKENNRWxlbWVudERlY2xhcmF0aW9uKSBpdGVtKSwgYXR0cik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJiOGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLkhUTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSFRNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5UQUdfTkFNRV9DQVNFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5BVFRSX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKEhUTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuQVRUUl9OQU1FX0NBU0UsIEludGVnZXIudG9TdHJpbmcoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVEFHX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQkJbm9kZS5wdXQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgIiIpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFZhbHVlKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUhUTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgSFRNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmYTY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTFRhZ0luZm9UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSFRNTFRhZ0luZm9UZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQotCXB1YmxpYyBIVE1MVGFnSW5mb1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEhUTUxUYWdJbmZvVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgSFRNTFRhZ0luZm9UZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOyAvLyROT04tTkxTLTEkCi0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oaHRtbCk7Ci0KLQkJCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsgLy8kTk9OLU5MUy0xJAotCQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oYm9keSk7Ci0KLQkJCUF0dHIgb25jbGljayA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgib25jbGljayIpOyAvLyROT04tTkxTLTEkCi0JCQlib2R5LnNldEF0dHJpYnV0ZU5vZGUob25jbGljayk7Ci0JCQljaGVja0F0dHJpYnV0ZVRhZ0luZm8oYm9keSwgb25jbGljayk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnRUYWdJbmZvKEVsZW1lbnQgbm9kZSkgewotCQkvLyBjaGVjayB0YWdpbmZvCi0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24obm9kZSk7Ci0JCWFzc2VydE5vdE51bGwoIkNhbm5vdCBjaGVjayB0YWdpbmZvIGJlY2F1c2Ugbm8gY20gZWxlbWVudCBkZWNsYXJhdGlvbiBmb3IgIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSwgZWxlbWVudERlY2wpOyAvLyROT04tTkxTLTEkCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGVsZW1lbnREZWNsLmdldFByb3BlcnR5KCJ0YWdJbmZvIik7IC8vJE5PTi1OTFMtMSQKLQkJCWFzc2VydE5vdE51bGwoIk5vIHRhZ2luZm8gZm91bmQgZm9yICIgKyBlbGVtZW50RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQXR0cmlidXRlVGFnSW5mbyhFbGVtZW50IGVsZW1lbnQsIEF0dHIgYXR0cmlidXRlKSB7Ci0JCS8vIGNoZWNrIHRhZ2luZm8KLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAiICsgZWxlbWVudC5nZXROb2RlTmFtZSgpLCBlbGVtZW50RGVjbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0RGVjbCA9IGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oZWxlbWVudERlY2wsIGF0dHJpYnV0ZS5nZXROYW1lKCkpOwotCQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yICIgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBhdHREZWNsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGF0dERlY2wuZ2V0UHJvcGVydHkoInRhZ0luZm8iKTsgLy8kTk9OLU5MUy0xJAotCQkJYXNzZXJ0TnVsbCgiVW5leHBlY3RlZCB0YWdpbmZvIGZvdW5kIGZvciAiICsgYXR0RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNQXR0cmlidXRlRGVjbGFyYXRpb24gaW5kaWNhdGVkIGJ5IGF0dHJpYnV0ZSBuYW1lIHdpdGhpbgotCSAqIGVsZW1lbnREZWNsCi0JICovCi0JcHJpdmF0ZSBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wsIFN0cmluZyBhdHROYW1lKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBudWxsOwotCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudERlY2wuZ2V0QXR0cmlidXRlcygpOwotCQkJU3RyaW5nIG5vcHJlZml4TmFtZSA9IERPTU5hbWVzcGFjZUhlbHBlci5nZXRVbnByZWZpeGVkTmFtZShhdHROYW1lKTsKLQkJCWlmIChhdHRyaWJ1dGVzICE9IG51bGwpIHsKLQkJCQlhdHRyRGVjbCA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShub3ByZWZpeE5hbWUpOwotCQkJCWlmIChhdHRyRGVjbCA9PSBudWxsKSB7Ci0JCQkJCWF0dHJEZWNsID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYXR0ckRlY2w7Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNRWxlbWVudERlY2xhcmF0aW9uIGZvciBnaXZlbiBub2RlCi0JICogCi0JICogQHJldHVybiBDTUVsZW1lbnREZWNsYXJhdGlvbiAtIENNRWxlbWVudERlY2xhcmF0aW9uIG9mIG5vZGUgb3IKLQkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBwb3NzaWJsZQotCSAqLwotCXByaXZhdGUgQ01FbGVtZW50RGVjbGFyYXRpb24gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oRWxlbWVudCBlbGVtZW50KSB7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0KLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCWlmIChtb2RlbFF1ZXJ5ICE9IG51bGwpCi0JCQlyZXN1bHQgPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkM2NlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL0JVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuUHJvcENNUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkVsZW1lbnRDU1NJbmxpbmVTdHlsZTsKLQotcHVibGljIGNsYXNzIEJVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgc29tZSBjc3MgYXR0cmlidXRlIHZhbHVlcyBpbmNsdWRpbmcgc2V0dGluZyB0aGUgc2FtZQotCSAqIHZhbHVlIHNldmVyYWwgdGltZXMgZm9yIGRpZmZlcmVudCBhdHRyaWJ1dGVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldEF0dHJpYnV0ZVZhbHVlKCkgewotCQlmaW5hbCBTdHJpbmcgQUJTT0xVVEUgPSAiYWJzb2x1dGUiOwotCQlmaW5hbCBTdHJpbmcgT05FID0gIjEiOwotCQlmaW5hbCBTdHJpbmcgUFggPSAiNTBweCI7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5ESVYpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9JRCwgIkxheWVyMCIpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9TVFlMRSwgIiIpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9QT1NJVElPTiwgQUJTT0xVVEUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9aX0lOREVYLCBPTkUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCwgUFgpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9IRUlHSFQsIFBYKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfVE9QLCBQWCk7Ci0JCQlzZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQsIFBYKTsKLQotCQkJYXNzZXJ0RXF1YWxzKEFCU09MVVRFLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1BPU0lUSU9OKSk7Ci0JCQlhc3NlcnRFcXVhbHMoT05FLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1pfSU5ERVgpKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0hFSUdIVCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1RPUCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBudWxsOwotCQl0cnkgewotCQkJZGVjbCA9IChJQ1NTU3R5bGVEZWNsYXJhdGlvbikgKChFbGVtZW50Q1NTSW5saW5lU3R5bGUpIGVsZW1lbnQpLmdldFN0eWxlKCk7Ci0JCX0KLQkJY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleCkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JCWlmIChkZWNsICE9IG51bGwpIHsKLQkJCVN0cmluZyBwcmlvcml0eSA9IGRlY2wuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLQkJCWRlY2wuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTsKLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSkgewotCQlTdHJpbmcgdmFsdWUgPSBudWxsOwotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlY2wgPSAoSUNTU1N0eWxlRGVjbGFyYXRpb24pICgoRWxlbWVudENTU0lubGluZVN0eWxlKSBlbGVtZW50KS5nZXRTdHlsZSgpOwotCQl9Ci0JCWNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXgpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfQotCQlpZiAoZGVjbCAhPSBudWxsKSB7Ci0JCQl2YWx1ZSA9IGRlY2wuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKLQkJfQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzk4MzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvR2V0T3ZlcnJpZGVTdHlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuRG9jdW1lbnRDU1M7Ci0KLXB1YmxpYyBjbGFzcyBHZXRPdmVycmlkZVN0eWxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3R5bGVUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEdldE92ZXJyaWRlU3R5bGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBHZXRPdmVycmlkZVN0eWxlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgR2V0T3ZlcnJpZGVTdHlsZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOyAKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQobnVsbCwgIjxzdHlsZT5wIHsJYm9yZGVyLWNvbG9yOiBibHVlOyBtYXJnaW46IDA7IH0gPC9zdHlsZT4gPHAgc3R5bGU9XCJib3JkZXItY29sb3I6IHJlZDsgbWFyZ2luOiAxO1wiPiIpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlEb2N1bWVudENTUyBkZGQgPSAoRG9jdW1lbnRDU1MpIGRvY3VtZW50OwotCQkJTm9kZUxpc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7Ci0JCQlkZGQuZ2V0T3ZlcnJpZGVTdHlsZSgoRWxlbWVudCkgbi5pdGVtKDApLCAiIik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvTW9kZWxNb2RpZmljYXRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZmVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy51dGlsLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTW9kZWxNb2RpZmljYXRpb25zIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsYWluRG9jdW1lbnQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAidGVzdCIpOwotCQlkb2N1bWVudC5zZXQoIiIpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICJ0ZXN0MiIpOwotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SFRNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudFhNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnRIVE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwRG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEhUTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQkKLQkJbW9kZWwgPSBjcmVhdGVKU1BNb2RlbCgpOwotCQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVKU1BNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQotCi0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyMDBhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmFkYXB0ZXJzLklDU1NNb2RlbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5odG1sY3NzLlN0eWxlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgVGVzdENTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFSS1VQID0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3R5bGVFbGVtZW50QWRhcHRlcigpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlSFRNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KE1BUktVUCk7Ci0KLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQkvLyBnZXQgaGVhZCB0YWcKLQkJCU5vZGVMaXN0IGxpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQUQpOwotCQkJRWxlbWVudCBoZWFkID0gKEVsZW1lbnQpIGxpc3QuaXRlbSgwKTsKLQotCQkJLy8gY3JlYXRlIGFuZCBhcHBlbmQgc3R5bGUgZWxlbWVudAotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuU1RZTEUpOwotCQkJZWxlLnNldEF0dHJpYnV0ZShIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX1RZUEUsICJ0ZXh0L2NzcyIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZChlbGUpOwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBTdHlsZUFkYXB0ZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuYWRhcHQoKElET01Ob2RlKSBlbGUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gYWRhcHRlciBvbiAiICsgZWxlLCBhZGFwdGVyKTsKLQkJCWFzc2VydFRydWUoIkFkYXB0ZXIgaXMgbm90IGFuIElDU1NNb2RlbEFkYXB0ZXIiLCBhZGFwdGVyIGluc3RhbmNlb2YgSUNTU01vZGVsQWRhcHRlcik7Ci0KLQkJCUlDU1NNb2RlbEFkYXB0ZXIgbW9kZWxBZGFwdGVyID0gKElDU1NNb2RlbEFkYXB0ZXIpIGFkYXB0ZXI7Ci0JCQlhc3NlcnROb3ROdWxsKCJUaGVyZSBzaG91bGQgYmUgYSBDU1MgbW9kZWwgZm9yIHRoZSBub2RlIiwgbW9kZWxBZGFwdGVyLmdldE1vZGVsKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHlwZUZvb0JhclN0eWxlRWxlbWVudEFkYXB0ZXIoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChNQVJLVVApOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJLy8gZ2V0IGhlYWQgdGFnCi0JCQlOb2RlTGlzdCBsaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFEKTsKLQkJCUVsZW1lbnQgaGVhZCA9IChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0KLQkJCS8vIGNyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnQKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNUWUxFKTsKLQkJCWVsZS5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCAiZm9vL2JhciIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZChlbGUpOwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBTdHlsZUFkYXB0ZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuYWRhcHQoKElET01Ob2RlKSBlbGUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gYWRhcHRlciBvbiAiICsgZWxlLCBhZGFwdGVyKTsKLQkJCWFzc2VydFRydWUoIkFkYXB0ZXIgaXMgbm90IGFuIElDU1NNb2RlbEFkYXB0ZXIiLCBhZGFwdGVyIGluc3RhbmNlb2YgSUNTU01vZGVsQWRhcHRlcik7Ci0KLQkJCUlDU1NNb2RlbEFkYXB0ZXIgbW9kZWxBZGFwdGVyID0gKElDU1NNb2RlbEFkYXB0ZXIpIGFkYXB0ZXI7Ci0JCQlhc3NlcnROdWxsKCJUaGVyZSBzaG91bGQgYmUgbm8gQ1NTIG1vZGVsIGZvciB0aGUgbm9kZSIsIG1vZGVsQWRhcHRlci5nZXRNb2RlbCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdENhdGFsb2dDb250ZW50TW9kZWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZWVlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MQ01Qcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRlbnRUZW1wbGF0ZSA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiID8+XG48IURPQ1RZUEUgaHRtbCAke01FVEhPRH0gJHtQVUJMSUN9ICR7U1lTVEVNfT5cbjxodG1sPlxuPGhlYWQ+XG48dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPlxuPC9oZWFkPlxuPGJvZHk+XG48L2JvZHk+XG48L2h0bWw+IjsKLQotCXB1YmxpYyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMoKSB7Ci0JCXRoaXMoIkhUTUwgQ29udGVudCBNb2RlbHMgZnJvbSBYTUwgQ2F0YWxvZyIpOwotCX0KLQotCXB1YmxpYyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMoU3RyaW5nIHN0cmluZykgewotCQlzdXBlcihzdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRJc05vdFhIVE1MQ29udGVudE1vZGVsKElET01Nb2RlbCBodG1sTW9kZWwpIHsKLQkJRWxlbWVudCBodG1sID0gaHRtbE1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCUNNRG9jdW1lbnQgY29ycmVzcG9uZGluZ0NNRG9jdW1lbnQgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGh0bWxNb2RlbCkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoaHRtbCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgbW9kZWwgZG9jdW1lbnQgbm90IGZvdW5kIiwgY29ycmVzcG9uZGluZ0NNRG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBpcyB1bmV4cGVjdGVkbHkgWEhUTUwiLCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudC5zdXBwb3J0cyhIVE1MQ01Qcm9wZXJ0aWVzLklTX1hIVE1MKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoSURPTU1vZGVsIGh0bWxNb2RlbCkgewotCQlFbGVtZW50IGh0bWwgPSBodG1sTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJQ01Eb2N1bWVudCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudCA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoaHRtbE1vZGVsKS5nZXRDb3JyZXNwb25kaW5nQ01Eb2N1bWVudChodG1sKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudCBtb2RlbCBkb2N1bWVudCBub3QgZm91bmQiLCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoImRvY3VtZW50IGlzIG5vdCBYSFRNTCIsIGNvcnJlc3BvbmRpbmdDTURvY3VtZW50LnN1cHBvcnRzKEhUTUxDTVByb3BlcnRpZXMuSVNfWEhUTUwpKTsKLQl9Ci0KLQlwcml2YXRlIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVRlc3RDb250ZW50cyhwdWJsaWNJZCwgc3lzdGVtSWQpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoc291cmNlKTsKLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVRlc3RDb250ZW50cyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKHN5c3RlbUlkICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtTWVNURU19IiwgIlwiIiArIHN5c3RlbUlkICsgIlwiIik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRUZW1wbGF0ZSwgIiR7U1lTVEVNfSIsICIiKTsKLQkJfQotCQlpZiAocHVibGljSWQgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50VGVtcGxhdGUsICIke1BVQkxJQ30iLCAiXCIiICsgcHVibGljSWQgKyAiXCIiKTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtQVUJMSUN9IiwgIiIpOwotCQl9Ci0JCWlmIChwdWJsaWNJZCAhPSBudWxsICYmIHN5c3RlbUlkICE9IG51bGwpCi0JCQlyZXN1bHQgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRUZW1wbGF0ZSwgIiR7TUVUSE9EfSIsICJQVUJMSUMiKTsKLQkJZWxzZSBpZiAocHVibGljSWQgPT0gbnVsbCAmJiBzeXN0ZW1JZCAhPSBudWxsKQotCQkJcmVzdWx0ID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50VGVtcGxhdGUsICIke01FVEhPRH0iLCAiU1lTVEVNIik7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtNRVRIT0R9IiwgIiIpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENIVE1MZHJhZnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgQ29tcGFjdCBIVE1MIDEuMCBEcmFmdC8vRU4iLCBudWxsKTsKLQkJYXNzZXJ0SXNOb3RYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MNDAxRnJhbWVzZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIEZyYW1lc2V0Ly9FTiIsICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9mcmFtZXNldC5kdGQiKTsKLQkJYXNzZXJ0SXNOb3RYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MNDAxU3RyaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCIpOwotCQlhc3NlcnRJc05vdFhIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUw0MDFUcmFuc2l0aW9uYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIik7Ci0JCWFzc2VydElzTm90WEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0V01MMTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIsIG51bGwpOwotCQlhc3NlcnRJc1hIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFdNTDEzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iLCAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEzLmR0ZCIpOwotCQlhc3NlcnRJc1hIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBCYXNpYygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRE9NTW9kZWwgaHRtbE1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLWJhc2ljL3hodG1sLWJhc2ljMTAuZHRkIik7Ci0JCWFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEZyYW1lc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIik7Ci0JCWFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxME1vYmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRE9NTW9kZWwgaHRtbE1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiwgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwU3RyaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwVHJhbnNpdGlvbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiZjg3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGb3JOUEVJbkNTU0NyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmFkYXB0ZXJzLklTdHlsZVNoZWV0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9yTlBFSW5DU1NDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHVibGljIHZvaWQgdGVzdENTU01vZGVsKCkgewotCi0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChnZXRIVE1MRG9jdW1lbnRUZXh0KCkpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJLy8gZ2V0IGhlYWQgdGFnCi0JCQlOb2RlTGlzdCBsaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFEKTsKLQkJCUVsZW1lbnQgaGVhZCA9IChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0KLQkJCS8vIGNyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnQKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNUWUxFKTsKLQkJCWVsZS5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCAidGV4dC9jc3MiKTsKLQotCQkJU3RyaW5nIGRlbGltID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGluZURlbGltaXRlcigpOwotCQkJaWYgKGRlbGltID09IG51bGwpCi0JCQkJZGVsaW0gPSAiXG4iOy8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIjwhLS0iKTsvLyROT04tTkxTLTEkCi0JCQlidWZmZXIuYXBwZW5kKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIi0tPiIpOy8vJE5PTi1OTFMtMSQKLQkJCWJ1ZmZlci5hcHBlbmQoZGVsaW0pOwotCQkJVGV4dCB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWVsZS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJaGVhZC5pbnNlcnRCZWZvcmUoZWxlLCBudWxsKTsKLQotCQkJLy8gZ2V0IGFkYXB0ZXIgZm9yIFN0eWxlU2hlZXQKLQkJCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKElDU1NTdHlsZVNoZWV0KSAoKElTdHlsZVNoZWV0QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBlbGUpLmdldEFkYXB0ZXJGb3IoSVN0eWxlU2hlZXRBZGFwdGVyLmNsYXNzKSkuZ2V0U2hlZXQoKTsKLQotCQkJLy8gY3JlYXRlIHN0eWxlIGRlY2xhcmF0aW9uCi0JCQlJQ1NTU3R5bGVSdWxlIHJ1bGUgPSBzaGVldC5jcmVhdGVDU1NTdHlsZVJ1bGUoKTsKLQkJCXJ1bGUuZ2V0U3R5bGUoKS5zZXRQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsICJsaW1lIiwgIiIpOwotCQkJcnVsZS5nZXRTdHlsZSgpLnNldFByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImJsdWUiLCAiIik7Ci0JCQlydWxlLmdldFN0eWxlKCkuc2V0UHJvcGVydHkoImJhY2tncm91bmQtY29sb3IiLCAiIzAwODBmZiIsICIiKTsKLQotCQkJLy9tb2RlbC5zYXZlKCk7Ci0KLQotCQl9Ci0KLQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhUTUxEb2N1bWVudFRleHQoKSB7Ci0JCXJldHVybiAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkMjI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgQWxsTW9kZWxQYXJzZXJUZXN0cyB7Ci0KLQkvLwlwdWJsaWMgQWxsTW9kZWxQYXJzZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCS8vCQkvL3N1cGVyKG5hbWUpOwotCS8vCX0KLQotCXB1YmxpYyB2b2lkIGhvbGRPbGRUZXN0TWFpbigpIHsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBQYXJzZXJUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDQoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDcoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q5KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEwKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDExKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEyKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDE0KCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFRhYmxlVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBBdHRyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQXR0clRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDkoKSk7Ci0JCXJ1blRlc3QobmV3IERvY1R5cGVUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFBJVGVzdCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBnZXRBbGxUZXN0cygpIHsKLQotCi0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDkuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTEuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0OS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRG9jVHlwZVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUElUZXN0LmNsYXNzKTsKLQkJLy8gdGhlIGZvbGxvdyBpcyBmYWlybHkgbG9uZyBydW5uaW5nCi0JCS8vdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0RXhhbXBsZUZpbGVzLmNsYXNzKTsKLQotCQlyZXR1cm4gdGVzdFN1aXRlOwotCX0KLQotCi0KLQlwcml2YXRlIHZvaWQgcnVuVGVzdChNb2RlbFRlc3QgdGVzdCkgewotCQl0cnkgewotCQkJdGVzdC50ZXN0TW9kZWwoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlNb2RlbFRlc3QucHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjE3MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEF0dHJUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0clRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEF0dHJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBBdHRyVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBocmVmPVwiPCU9YyU+XCI+YTwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiNDRjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEF0dHJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImQiLCAiZSIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImYiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJQXR0ciBiID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJiIik7Ci0JCQliLnNldFByZWZpeCgieCIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImIubmFtZT0iICsgYi5nZXROYW1lKCkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiLnZhbHVlPSIgKyBiLmdldFZhbHVlKCkpOwotCQkJU3RyaW5nIGFiID0gYS5nZXRBdHRyaWJ1dGUoImIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYSBiPSIgKyBhYik7Ci0JCQlTdHJpbmcgYXhiID0gYS5nZXRBdHRyaWJ1dGUoIng6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhIHg6Yj0iICsgYXhiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5nZXRBdHRyaWJ1dGVOb2RlKCJkIikuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjMxNWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEF0dHJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBBdHRyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEF0dHJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQXR0clRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIHhtbG5zPSdkZWZhdWx0LXVyaScgeG1sbnM6Yj0nYi11cmknPjxjIGQ9J2QtdmFsdWUnIGI6ZT0nZS12YWx1ZScvPjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYyA9IChFbGVtZW50KSBhLmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJQXR0ciB4bWxucyA9IGEuZ2V0QXR0cmlidXRlTm9kZSgieG1sbnMiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnMgWyIgKyB4bWxucy5nZXROYW1lc3BhY2VVUkkoKSArICJdIik7Ci0JCQlBdHRyIHhtbG5zX2IgPSBhLmdldEF0dHJpYnV0ZU5vZGUoInhtbG5zOmIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnM6YiBbIiArIHhtbG5zX2IuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCQkJQXR0ciBkID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJkIik7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImQgWyIgKyBkLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQkJCUF0dHIgYl9lID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJiOmUiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYjplIFsiICsgYl9lLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJWYWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5MjFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVmFsdWVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEF0dHJWYWx1ZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gVkFMVUVTID0geyI8PFByZXZpb3VzIiwgIjxwYWdlPiIsICJOZXh0Pj4ifTsKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3QjdGVzdE1vZGVsKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQotCQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGJ1dHRvbiB2YWx1ZT1cIiIrIFZBTFVFU1swXSArIlwiPjwvYnV0dG9uPjxidXR0b24gdmFsdWU9XCIiICsgVkFMVUVTWzFdICsgIlwiPjwvYnV0dG9uPjxidXR0b24gdmFsdWU9XCIiICsgVkFMVUVTWzJdICsgIlwiPjwvYnV0dG9uPiIpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9tID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCU5vZGVMaXN0IG5vZGVzID0gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsKLQkJCWFzc2VydFRydWUoIk11c3QgYmUgMyBidXR0b24gZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50LiIsIG5vZGVzLmdldExlbmd0aCgpID09IDMpOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIG5vZGUgPSBub2Rlcy5pdGVtKGkpOwotCQkJCU5vZGUgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgidmFsdWUiKTsKLQkJCQlhc3NlcnRUcnVlKCJBdHRyaWJ1dGUgJ3ZhbHVlJyBub3QgcHJlc2VudC4iLCBhdHRyICE9IG51bGwgJiYgYXR0ci5nZXROb2RlVmFsdWUoKS5sZW5ndGgoKSA+IDApOwotCQkJCWFzc2VydEVxdWFscygiQXR0cmlidXRlIHZhbHVlcyBhcmUgbm90IGVxdWFsIiwgVkFMVUVTW2ldLCBhdHRyLmdldE5vZGVWYWx1ZSgpKTsgCi0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGEwOGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIENEQVRBU2VjdGlvblRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDREFUQVNlY3Rpb25UZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IENEQVRBU2VjdGlvblRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlOb2RlIGEgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmb3IgKE5vZGUgY2hpbGQgPSBhLmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKSB7Ci0JCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUpCi0JCQkJCWNvbnRpbnVlOwotCQkJCUNEQVRBU2VjdGlvbiBjZGF0YSA9IChDREFUQVNlY3Rpb24pIGNoaWxkOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM2NmU2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIENEQVRBU2VjdGlvblRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ0RBVEFTZWN0aW9uVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBDREFUQVNlY3Rpb25UZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlDREFUQVNlY3Rpb24gY2RhdGEgPSBkb2N1bWVudC5jcmVhdGVDREFUQVNlY3Rpb24oImNvbnRlbnRPZkNEQVRBU2VjdGlvbiIpOwotCQkJYS5hcHBlbmRDaGlsZChjZGF0YSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQljZGF0YS5zZXREYXRhKCJuZXcgY29udGVudCIpOwotCi0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQljZGF0YS5zZXREYXRhKCJuZXcgY29udGVudCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlN2NjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IDwgY29udGVudCIpOwotCi0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQljZGF0YS5zZXREYXRhKCJuZXcgPiBjb250ZW50Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0ZGZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3Q0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0NCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCi0JCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImh0bWwiKTsKLQkJaHRtbC5zZXRBdHRyaWJ1dGUoInhtbG5zOmpzcCIsICJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlIik7Ci0JCQotCQlFbGVtZW50IGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoZWFkIik7Ci0JCUVsZW1lbnQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci0JCXNjcmlwdC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0JCUNEQVRBU2VjdGlvbiBjZGF0YVNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVDREFUQVNlY3Rpb24oInRlc3QiKTsKLQkJCi0JCXRyeSB7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQkJCWh0bWwuYXBwZW5kQ2hpbGQoaGVhZCk7Ci0JCQloZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7Ci0JCQlzY3JpcHQuYXBwZW5kQ2hpbGQoY2RhdGFTZWN0aW9uKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkRpZCBub3QgcGVybWl0IENEQVRBIHNlY3Rpb24gaW4gc2NyaXB0IGVsZW1lbnQuIik7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NDc2NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRG9jVHlwZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEb2NUeXBlVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBEb2NUeXBlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRG9jVHlwZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IERvY1R5cGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUlET01Eb2N1bWVudFR5cGUgZG9jVHlwZSA9IChJRE9NRG9jdW1lbnRUeXBlKSBkb2N1bWVudC5jcmVhdGVEb2N0eXBlKCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChkb2NUeXBlKTsKLQkJCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2NUeXBlLnNldFN5c3RlbUlkKCJzeXRlbSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2NUeXBlLnNldFB1YmxpY0lkKCJwdWJsaWMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIiksIGRvY1R5cGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMDcxNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBjaGFuZ2VUYWdOYW1lKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHRhZ05hbWUpIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJTm9kZSBwYXJlbnQgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLQkJRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJd2hpbGUgKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQkJYXR0ciA9IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCW5ld0VsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJfQotCQl3aGlsZSAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCU5vZGUgY2hpbGQgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWNoaWxkID0gZWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0JCQluZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJfQotCQlwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGVsZW1lbnQpOwotCQlwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+PGIgZT1cImZcIiBjPVwiZFwiPjxnIC8+PGggLz48L2I+PC9hPiIpOwotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvL0VsZW1lbnQgaSA9Ci0JCQljaGFuZ2VUYWdOYW1lKGIsICJpIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIyODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVsZW1lbnRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImMiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCJ4Iik7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYS50YWdOYW1lPSIgKyBhLmdldFRhZ05hbWUoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWIuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTQxNTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVsZW1lbnRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgieDphIik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYyIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQkJYi5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoIiIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImEudGFnTmFtZT0iICsgYS5nZXRUYWdOYW1lKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnNldFByZWZpeCgieSIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImEudGFnTmFtZT0iICsgYS5nZXRUYWdOYW1lKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnNldFByZWZpeCgieSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzNjODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5hcHBlbmRDaGlsZChicik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MywgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGY0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW1wdHlUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbXB0eVRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVtcHR5VGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQkJCXAucmVtb3ZlQ2hpbGQodGV4dCk7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWNlZGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVtcHR5VGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVtcHR5VGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50Lmluc2VydEJlZm9yZShhLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1NGZlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiZndDsiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5OGJiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEmZ3Q7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTlkMGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJhYiYiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJhYiZjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiZGFiJmMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJkYWImY2UiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzIzODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNhJmIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2N2Q0YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmYiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyMWY4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0NiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q2LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q2KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0NigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDYoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjOGRkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+YSYjNjU7JiN4NDE7JnVuazsmdW5rJnVuazwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkN2Q0NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiZpYm07JnJ0cDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDIyNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q5IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDkoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q5KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0OSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDQsIDAsICImZ3QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDcsIDAsICI7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL01vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNmM5ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5EYXRlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggPSAiUGFyc2VyUmVzdWx0cyI7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSAiLnR4dCI7Ci0JcHJvdGVjdGVkIFRlc3RXcml0ZXIgZk91dHB1dFdyaXRlciA9IG5ldyBUZXN0V3JpdGVyKCk7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDQwOTY7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZWNob1RvU3lzdGVtT3V0ID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIHByaW50ZWRPbmNlOwotCXByaXZhdGUgYm9vbGVhbiBwcmludFN1bW1hcnlUb1N5c3RlbU91dDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNb2RlbFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQl0cnkgewotCQkJcHJpbnRDbGFzcygpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIE1vZGVsVGVzdCgpIHsKLQkJdGhpcygiZHVtbXkiKTsKLQkJLy8JCXRyeSB7Ci0JCS8vCQkJcHJpbnRDbGFzcygpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YKLQkJCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCS8vYXNzZXJ0VHJ1ZSgiYmFzaWMgWE1MIGVtcHR5IG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgbW9kZWwgIT0KLQkJLy8gbnVsbCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCS8vYXNzZXJ0VHJ1ZSgibW9kZWxNYW5hZ2VyIG11c3Qgbm90IGJlIG51bGwiLCBtb2RlbE1hbmFnZXIgIT0KLQkJCS8vIG51bGwpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mCi0JCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoVGVzdFdyaXRlci5jb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy9hc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPQotCQkvLyBudWxsKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Q2xhc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Tm9kZShOb2RlIG5vZGUsIGludCBpbmRlbnQpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDEwKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspCi0JCQkJYnVmZmVyLmFwcGVuZCgiLS0iKTsKLQkJCWJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuZXNjYXBlKG5vZGUudG9TdHJpbmcoKSkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWluZGVudCsrOwotCQkJTm9kZSBjaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJd2hpbGUgKGNoaWxkICE9IG51bGwpIHsKLQkJCQlwcmludE5vZGUoY2hpbGQsIGluZGVudCk7Ci0JCQkJY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50U291cmNlKElET01Nb2RlbCBtb2RlbCkgewotCQl0cnkgewotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJTb3VyY2UgOiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldFRleHQoKSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50VHJlZShJRE9NTW9kZWwgbW9kZWwpIHsKLQkJdHJ5IHsKLQkJCXByaW50RmxhdE1vZGVsKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJCW5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyKGZPdXRwdXRXcml0ZXIpLmNoZWNrTW9kZWwobW9kZWwpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJUcmVlIDoiKTsKLQkJCXByaW50Tm9kZShtb2RlbC5nZXREb2N1bWVudCgpLCAwKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleCk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgdGVzdE91dHB1dERpcmVjdG9yeSA9IHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICsgRGF0ZVV0aWwubm93KCk7Ci0JCQlTdHJpbmcgY3VycmVudEZpbGVuYW1lID0gZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyBmaWxlRXh0ZW5zaW9uOwotCQkJRmlsZSBmaWxlb3V0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IodGVzdE91dHB1dERpcmVjdG9yeSwgY3VycmVudEZpbGVuYW1lLCB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQlXcml0ZXIgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKGZpbGVvdXQpOwotCQkJZmlsZVdyaXRlci53cml0ZShmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJZmlsZVdyaXRlci5jbG9zZSgpOwotCQkJY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoZk91dHB1dFdyaXRlciwgY3VycmVudEZpbGVuYW1lKTsKLQotCQkJaWYgKGVjaG9Ub1N5c3RlbU91dCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJfQotCi0JCQlmT3V0cHV0V3JpdGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMuCi0JICogCi0JICogQHBhcmFtIG91dHB1dFdyaXRlcgotCSAqIEBwYXJhbSBjdXJyZW50RmlsZW5hbWUKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoVGVzdFdyaXRlciBvdXRwdXRXcml0ZXIsIFN0cmluZyBjdXJyZW50RmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCQlGaWxlIHByZXZpb3VzUmVzdWx0c0RpciA9IEZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXIgIT0gbnVsbCkgewotCQkJU3RyaW5nIGN1cnJlbnRSZXN1bHRzID0gb3V0cHV0V3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQlGaWxlIHByZXZpb3VzUmVzdWx0c0ZpbGUgPSBuZXcgRmlsZShwcmV2aW91c1Jlc3VsdHNEaXIsIGN1cnJlbnRGaWxlbmFtZSk7Ci0JCQlGaWxlUmVhZGVyIHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihwcmV2aW91c1Jlc3VsdHNGaWxlKTsKLQkJCVN0cmluZyBwcmV2aW91c1Jlc3VsdHMgPSByZWFkU3RyaW5nKHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIpOwotCQkJU3RyaW5nQ29tcGFyZVV0aWwgc3RyaW5nQ29tcGFyZSA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCQkJLy8gdHJ5aW5nIHRvICJmb3JjZSIgdGhlIHNhbWUgbGluZWRlbGltdGVyIGRpZG4ndCB3b3JrIHdlbGwsCi0JCQkvLyBJIHRoaW5rIHNpbmNlIHRoZSBsaW5lIGRlbGltaXRlciBpcyBpbnB1dCBvbiBzb21lIHRlc3RzLAotCQkJLy8gYW5kIENWUyBpcyBsaWtlbHkgdG8gY2hhbmdlIGFueXdheSAoZm9yIEFTQ0lJIGZpbGVzKS4KLQkJCS8vIHNvIHdlJ2xsIGlnbm9yZSBpbiBvdXIgY29tcGFyaXNvbnMuIE5vdGU6IHdlIHdvdWxkbid0Ci0JCQkvLyB3YW50IHRvIGlnbm9yZSB3aGl0ZXNwYWNlLiBUaGVyZSBtaWdodCBhY3R1YWxseSBiZSBzb21lCi0JCQkvLyB0ZXN0cyB0aGF0IGFyZSBub3QgYXMgYWNjdXJhdGUgaWYgd2UgaWdub3JlIEVPTCwgYnV0IHRoZXJlCi0JCQkvLyBzZWVtcyB0byBiZSBubyBlYXN5IHdheSB0byBoYW5kbGUsIHdpdGggb3V0IGEgbG90IG9mIHRyb3VibGUuCi0JCQlpZiAoIXN0cmluZ0NvbXBhcmUuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihwcmV2aW91c1Jlc3VsdHMsIGN1cnJlbnRSZXN1bHRzKSkgewotCQkJCS8vIHByZXZpb3VzUmVzdWx0cy5lcXVhbHMoY3VycmVudFJlc3VsdHMpKSB7Ci0JCQkJLy8gZmFpbAotCQkJCXN1Y2Nlc3MgPSBmYWxzZTsKLQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGZhaWxlZCBjb21wYXJpc29uIHRvIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByZXZpb3VzOiAiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocHJldmlvdXNSZXN1bHRzKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQ6ICIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UmVzdWx0cyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdWNjZXNzID0gdHJ1ZTsKLQkJCQlpZiAocHJpbnRTdW1tYXJ5VG9TeXN0ZW1PdXQpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGNvbXBhcmVkIG9rIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWlmICghcHJpbnRlZE9uY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5vIFByZXZpb3VzIERpcmVjdG9yeSBmb3VuZCAuLi4gY291bGRuJ3QgY29tcGFyZSAiICsgY3VycmVudEZpbGVuYW1lICsgIiB3aXRoIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlwcmludGVkT25jZSA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiY3VycmVudCBpcyBub3QgZXF1YWwgdG8gcmVmZXJlbmNlIHJlc3VsdHMgZm9yICIgKyBjdXJyZW50RmlsZW5hbWUsIHN1Y2Nlc3MpOwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCByZWFkU3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSBwcmV2aW91c1Jlc3VsdHNGaWxlUmVhZGVyCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZWFkU3RyaW5nKEZpbGVSZWFkZXIgZmlsZVJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHJlYWRJbnB1dFN0cmVhbShmaWxlUmVhZGVyKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyByZWFkSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRTdHJlYW1SZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IGlucHV0U3RyZWFtUmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQkvLyByZW1lbWJlciAtLSB3ZSBkaWRuJ3Qgb3BlbiBzdHJlYW0gLi4uIHNvIHdlIGRvbid0IGNsb3NlIGl0Ci0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCB0ZXN0TW9kZWwoKTsKLQotCXByb3RlY3RlZCB2b2lkIHByaW50RmxhdE1vZGVsKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZmxhdE1vZGVsKSB7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXRub2RlID0gZmxhdE1vZGVsLmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCXdoaWxlIChmbGF0bm9kZSAhPSBudWxsKSB7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0bm9kZS50b1N0cmluZygpKTsKLQkJCWZsYXRub2RlID0gZmxhdG5vZGUuZ2V0TmV4dCgpOwotCi0JCX0KLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL05vZGVMaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMTNiZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTm9kZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBOb2RlTGlzdFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IE5vZGVMaXN0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8cD48L3A+Iik7Ci0JCQlOb2RlIHBhcmVudCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTsgaSA8IDU7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1OyBpIDwgMTA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxMDsgaSA8IDIwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjA7IGkgPCA1MDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDUwOyBpIDwgMTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTAwOyBpIDwgMjAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwOyBpIDwgNTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDEwMDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwMDsgaSA8IDUwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1MDAwOyBpIDwgMTAwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGl0ZXJhdGUoTm9kZSBwYXJlbnQpIHsKLQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgaSA9IDA7Ci0JCWludCB0ID0gMDsKLQkJd2hpbGUgKHQgPCAxMDAwKSB7Ci0JCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gcGFyZW50LmdldENoaWxkTm9kZXMoKTsKLQkJCWludCBsZW5ndGggPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotCQkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQkJY2hpbGROb2Rlcy5pdGVtKGkpOwotCQkJfQotCQkJLy8gdGhlc2UgMiBsaW5lcyBhcmUgcmVxdWlyZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUKLQkJCXBhcmVudC5hcHBlbmRDaGlsZChwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0JCQlwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmdldExhc3RDaGlsZCgpKTsKLQkJCXQrKzsKLQkJfQotCQlmbG9hdCBkID0gKChmbG9hdCkgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQpKSAvIHQ7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihkICsgIiBtcyBmb3IgIiArIGkgKyAiIGNoaWxkIG5vZGVzIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTnVsbElucHV0U3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmZTQ3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1jbGFzcyBOdWxsSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFyayhpbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkgewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmtTdXBwb3J0ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKSB7Ci0JCS8vIHdlIGNhbiBtYXJrIG5vdGhpbmcuCi0JCS8vIGFuZCwgd2UgYXJlIHVzaW5nIHRoaXMgTnVsbCBjbGFzcyBzcGVjaWZpY2FsbHkgZm9yCi0JCS8vIGEgImZha2UiIHJlc2V0dGFibGUgc3RyZWFtLgotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVhZCgpCi0JICovCi0JcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3Jlc2V0KCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3NraXAobG9uZykKLQkgKi8KLQlwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvT21pc3NpYmxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvT21pc3NpYmxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWY4NTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL09taXNzaWJsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBPbWlzc2libGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLk1vZGVsVGVzdCN0ZXN0TW9kZWwoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPGh0bWw+PGJvZHk+PHVsPjxsaT5GaXJzdDxsaT5TZWNvbmQ8bGk+VGhpcmQ8L3VsPjwvYm9keT48L2h0bWw+Iik7Ci0JCU5vZGVMaXN0IGxpc3QgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1bCIpOwotCQlhc3NlcnRFcXVhbHMoIlRoZXJlIG1heSBvbmx5IGJlIG9uZSBsaXN0IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCU5vZGVMaXN0IGl0ZW1zID0gbGlzdC5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgbGlzdCBtdXN0IGNvbnRhaW4gMyBpdGVtcyIsIDMsIGl0ZW1zLmdldExlbmd0aCgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZDJiYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBQSVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUElUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQSVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBJVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT48P2VjaG8gJFBIUF9TRUxGPz48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZvciAoTm9kZSBjaGlsZCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCQlpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKLQkJCQkJY29udGludWU7Ci0JCQkJUHJvY2Vzc2luZ0luc3RydWN0aW9uIHBpID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgY2hpbGQ7Ci0JCQkJU3RyaW5nIHRhcmdldCA9IHBpLmdldFRhcmdldCgpOwotCQkJCWlmICh0YXJnZXQgPT0gbnVsbCkKLQkJCQkJdGFyZ2V0ID0gIm51bGwiOwotCQkJCVN0cmluZyBkYXRhID0gcGkuZ2V0RGF0YSgpOwotCQkJCWlmIChkYXRhID09IG51bGwpCi0JCQkJCWRhdGEgPSAibnVsbCI7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ0YXJnZXQoIiArIHRhcmdldCArICIpIGRhdGEgKCIgKyBkYXRhICsgIikiKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTlmN2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Iik7Ci0JCQlOb2RlIHAgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOb2RlIGIgPSBwLmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgYjIgPSBiLmdldE5leHRTaWJsaW5nKCk7Ci0JCQlOb2RlIHAyID0gcC5nZXROZXh0U2libGluZygpOwotCQkJLyoKLQkJCSAqIEVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCSAqIGRvY3VtZW50LmFwcGVuZENoaWxkKHApOyBFbGVtZW50IGIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOyBwLmFwcGVuZENoaWxkKGIpOyBFbGVtZW50IGIyID0KLQkJCSAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsgcC5hcHBlbmRDaGlsZChiMik7IEVsZW1lbnQgcDIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOyBkb2N1bWVudC5hcHBlbmRDaGlsZChwMik7Ci0JCQkgKi8KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICJhIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiKS5nZXRTdGFydE9mZnNldCgpLCAwLCAiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgYjIpLmdldFN0YXJ0T2Zmc2V0KCksIDAsICJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiMikuZ2V0RW5kT2Zmc2V0KCksIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBwMikuZ2V0U3RhcnRPZmZzZXQoKSwgMCwgImUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRTdGFydE9mZnNldCgpICsgMywgMCwgImYiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRFbmRPZmZzZXQoKSwgMCwgImciKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMDYxNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YSBiPVwiXCIgIGM9XCJjXCI+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAwLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOCwgMSwgIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNGU3MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQkvL1N0cnVjdHVyZWREb2N1bWVudEV2ZW50IGV2ZW50ID0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGEgYiAgPiIpOwotCQkJLy8gZG9udCdzIHByaW50IGluc3RhbmNlIG9mIGV2ZW50LCBvciBtYW55IHRlc3RzIHdpbGwgZmFpbCB3aGVuCi0JCQkvLyBldmVudCBjbGFzcyBpcyBjaGFuZ2VkIChleGFjdGx5IHdoYXQgaXMgbm90IG5lZWRlZCBmb3IgdW5pdAotCQkJLy8gdGVzdHMhKQotCQkJLy8gZk91dHB1dFdyaXRlci53cml0ZWxuKGV2ZW50LnRvU3RyaW5nKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBldmVudDIgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMSwgIiIpOwotCQkJLy8gSSByZW1vdmVkIHRoaXMgcGFydCBvZiBvdXRwdXQsIHNpbmNlIHJlbmFtaW5nIGNsYXNzIG9yIHBhY2thZ2UKLQkJCS8vIHdpbGwgY2F1c2UgdGVzdCB0byBmYWlsIQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV2ZW50Mi50b1N0cmluZygpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZDNiNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhPlxuXG48JSBhICU+XG48JSBiICU+XG48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAwLCAiPCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA3LCAwLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOCwgMCwgImUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDksIDAsICI+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4NmU0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTb3VyY2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTb3VyY2VUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInQiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHQpOwotCQkJU291cmNlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBTb3VyY2VWYWxpZGF0b3IodCk7Ci0KLQkJCVN0cmluZyBzb3VyY2UgPSBudWxsOwotCQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLQkJCXNvdXJjZSA9ICJhYWE8YmJiPmNjYyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJhYWEmYW1wO1wiJ2JiYiZndDsmbHQ7Y2NjJnF1b3Q7JiM2NDsiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJmFtcDsmJiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImYmJiJjw+Y2NjIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZ1bms7JnVuayI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzY0MjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU291cmNlVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJQXR0ciBiID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJiIik7Ci0JCQlhLnNldEF0dHJpYnV0ZU5vZGUoYik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVNvdXJjZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgU291cmNlVmFsaWRhdG9yKGIpOwotCi0JCQlTdHJpbmcgc291cmNlID0gbnVsbDsKLQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwotCi0JCQlzb3VyY2UgPSAiYWFhPGJiYj5jY2MiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiYWFhJmFtcDtiYmImZ3Q7Jmx0O2NjYyZxdW90OyYjNjQ7IjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZhbXA7JiYiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiXCJhYWFcIiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJcImEnYVwiIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzY2Q5OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Tb3VyY2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNvdXJjZVRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNvdXJjZVRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTb3VyY2VUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU291cmNlVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCUF0dHIgYiA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiYiIpOwotCQkJYS5zZXRBdHRyaWJ1dGVOb2RlKGIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlTb3VyY2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFNvdXJjZVZhbGlkYXRvcihiKTsKLQotCQkJU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotCQkJc291cmNlID0gIjwlIGFhYSAlPjwlPSBiYmIgJT4vPCUhIGNjYyAlPmRkZCI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICI8JSBhYWEiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiPjwgJSBhYWEgJT4iOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMWQzNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0Mi5zcGxpdFRleHQoNCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImRkZGRkZGQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDMuYXBwZW5kRGF0YSgiZWVlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTE2Y2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gdGV4dDIuc3BsaXRUZXh0KDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmluc2VydEJlZm9yZShiLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDIwZDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImJiYmIiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dDIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLmluc2VydEJlZm9yZShiLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQ3MGMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5hcHBlbmREYXRhKCJhYWEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5kZWxldGVEYXRhKDAsIDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNjY2MiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5hcHBlbmREYXRhKCJhYWEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYwMDRlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCg2KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJSIik7Ci0JCQlwLmluc2VydEJlZm9yZShiciwgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjY2NkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNjY2RlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dDMpOwotCQkJcC5pbnNlcnRCZWZvcmUoYiwgYnIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQ0ID0gdGV4dDIuc3BsaXRUZXh0KDMpOwotCQkJRWxlbWVudCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSSIpOwotCQkJaS5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmluc2VydEJlZm9yZShpLCB0ZXh0NCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ni5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3MGMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q2IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDYuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDYoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q2KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQkJCS8vID09PiAvLyBUZXh0IHRleHQzID0KLQkJCXRleHQyLnNwbGl0VGV4dCg0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiYmJiYmQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0N2FhZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFhYSIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiYmJiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJLy8gZGVsZXRlIGFjY3Jvc3Mgbm9kZSBib3VuZHJ5Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA2LCAzLCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzE3ZmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYWEiKTsKLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYmJiYiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCS8vIGRlbGV0ZSBhY2Nyb3NzIG5vZGUgYm91bmRyeQotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNCwgNiwgIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjA1Y2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUYWJsZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUYWJsZVRlc3QuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGFibGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUYWJsZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRhYmxlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlFbGVtZW50IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCT0RZIik7Ci0JCWh0bWwuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwotCQl0YWJsZS5zZXRBdHRyaWJ1dGUoImJvcmRlciIsICIxIik7Ci0JCUVsZW1lbnQgdGQgPSBudWxsOwotCQlmb3IgKGludCByb3cgPSAwOyByb3cgPCAyOyByb3crKykgewotCQkJRWxlbWVudCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7Ci0JCQl0YWJsZS5hcHBlbmRDaGlsZCh0cik7Ci0JCQlmb3IgKGludCBjb2wgPSAwOyBjb2wgPCAyOyBjb2wrKykgewotCQkJCXRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKLQkJCQl0ci5hcHBlbmRDaGlsZCh0ZCk7Ci0JCQl9Ci0JCX0KLQkJYm9keS5hcHBlbmRDaGlsZCh0YWJsZSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgZm9udCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkZPTlQiKTsKLQkJZm9udC5zZXRBdHRyaWJ1dGUoImNvbG9yIiwgInJlZCIpOwotCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQlmb250LmFwcGVuZENoaWxkKHRleHQpOwotCQl0ZC5hcHBlbmRDaGlsZChmb250KTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZDJlNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXh0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNoYXJhY3RlckRhdGEgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQl0ZXh0LnNldERhdGEoImhlbGxvICZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKHRleHQuZ2V0RGF0YSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlNzA5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGV4dFRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUZXh0VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ2hhcmFjdGVyRGF0YSB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRleHQuc2V0Tm9kZVZhbHVlKCJoZWxsbyAmbHQ7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbih0ZXh0LmdldE5vZGVWYWx1ZSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMTcwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGV4dFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUZXh0VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJSURPTU5vZGUgdGV4dCA9IChJRE9NTm9kZSkgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvIDwiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICZsdDsiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICZ1bms7Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmIzY1OyIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJiBnb29kLWJ5ZSIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM2ZGUzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsKLQkJCWh0bWwuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWJvZHkuYXBwZW5kQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGJyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTUciKTsKLQkJCXAuYXBwZW5kQ2hpbGQoaW1nKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5pbnNlcnRCZWZvcmUodGV4dCwgaW1nKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYm9keS5yZW1vdmVDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYm9keS5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjMwZDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDEwIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDEwKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDEwKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDEwKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCWEuc2V0QXR0cmlidXRlKCJiIiwgImMiKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoiKTsKLQkJCUlET01Ob2RlIG5vZGUgPSAoSURPTU5vZGUpIGI7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQlJdGVyYXRvciBlID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpbnQgaSA9IDA7Ci0JCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGUubmV4dCgpOwotCQkJCWJvb2xlYW4gb2sgPSB0cnVlOyAvLyBubyBsb25nZXIgaGFzIHBhcmVudC4KLQkJCQkJCQkJICAgLy8gLy8ocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCWIuc2V0QXR0cmlidXRlKCJjIiwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCWZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQllID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIG5vIGxvbmdlciBoYXMgcGFyZW50LgotCQkJCQkJCQkgICAvLyAocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCWEuc2V0QXR0cmlidXRlKCJiIiwgImNkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoiKTsKLQkJCW5vZGUgPSAoSURPTU5vZGUpIGI7Ci0JCQlmbGF0Tm9kZSA9IG5vZGUuZ2V0U3RhcnRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0Tm9kZS5nZXRUZXh0KCkpOwotCQkJZSA9IGZsYXROb2RlLmdldFJlZ2lvbnMoKS5pdGVyYXRvcigpOwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGUubmV4dCgpOwotCQkJCWJvb2xlYW4gb2sgPSB0cnVlOyAvLyAocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMDQ2ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDExIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDExKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDExKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDExKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWM4MjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKGEyLCBhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jdW1lbnQucmVtb3ZlQ2hpbGQoYTIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODM5ZDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDEzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMy4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDEzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDEzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDEzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YT5cclxuPGI+XHJcbjwvYT4iKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYiA9IChFbGVtZW50KSBhLmdldExhc3RDaGlsZCgpOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnJlbW92ZUNoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNjJkMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxNCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxNChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxNCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxNCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMiwgMCwgIiAiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTA1MWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDE1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCS8vIFhNTCBjYXNlCi0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPCU9IGFhYWEgJT48UD4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJLy8JSFRNTCBjYXNlCi0JCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL2RvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPjxQPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjk5YzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8SFRNTD5cclxuPEhFQUQ+PC9IRUFEPlxyXG48Qk9EWT48L0JPRFk+XHJcbjwvSFRNTD5cclxuIik7Ci0JCQlFbGVtZW50IGh0bWwgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBoZWFkID0gKEVsZW1lbnQpIGh0bWwuZ2V0Rmlyc3RDaGlsZCgpLmdldE5leHRTaWJsaW5nKCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk1FVEEiKTsKLQkJCW1ldGEuc2V0QXR0cmlidXRlKCJuYW1lIiwgIkdFTkVSQVRPUiIpOwotCQkJbWV0YS5zZXRBdHRyaWJ1dGUoImNvbnRlbnQiLCAiVXBkYXRlciBUZXN0IDIiKTsKLQkJCWhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7Ci0JCQlUZXh0IHRleHQ0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxyXG4iKTsKLQkJCWhlYWQuaW5zZXJ0QmVmb3JlKHRleHQ0LCBtZXRhKTsKLQkJCVRleHQgdGV4dDUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHJcbiIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZCh0ZXh0NSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUSVRMRSIpOwotCQkJVGV4dCB0ZXh0NiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXRpdGxlLmFwcGVuZENoaWxkKHRleHQ2KTsKLQkJCWhlYWQuYXBwZW5kQ2hpbGQodGl0bGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQyODE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcbiIpOwotCQkJYS5pbnNlcnRCZWZvcmUodDEsIGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0JCQlhLmFwcGVuZENoaWxkKHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1YjEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXQuc2V0RGF0YSgiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDFiN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT4mYXBvczs8L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgdCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYS5yZW1vdmVDaGlsZCh0KTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NzE1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDYoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnJlbW92ZUNoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjU3ZTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q3IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q3LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q3KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDcoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGIyLCBiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVhNTY2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0OCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0OCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBwMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHAyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2YjdhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q5IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0OShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q5KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDkoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU1RZTEUiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJwIik7Ci0JCQlzdHlsZS5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmVmMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDUsIDEsICIiKTsKLQkJCWlmIChmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJvazogUmVnaW9uQ2hhbmdlZEV2ZW50Iik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm5vdCBvazogIiArIGZtRXZlbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJfQotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlpZiAoYmVmb3JlICE9IGFmdGVyKSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJub3Qgb2s6IE5vZGUgcmVwbGFjZWQiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigib2s6IE5vZGUgbm90IHJlcGxhY2VkIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzMDMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9jc3MvU3R5bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuY3NzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuTW9kZWxUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLkRvY3VtZW50U3R5bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTGlua1N0eWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLlN0eWxlU2hlZXRMaXN0OwotCi1wdWJsaWMgY2xhc3MgU3R5bGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3R5bGVUZXN0LgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFN0eWxlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3R5bGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTdHlsZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOyAvL25ldyBIVE1MTW9kZWxJbXBsKCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU1RZTEUiKTsKLQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkJPRFkgeyBjb2xvciA6IHJlZDsgfSBQIHsgY29sb3IgOiBncmVlbjsgfSBCIHsgY29sb3IgOiBibHVlOyB9Iik7Ci0JCXN0eWxlLmFwcGVuZENoaWxkKHRleHQpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChzdHlsZSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCURvY3VtZW50U3R5bGUgZHMgPSAoRG9jdW1lbnRTdHlsZSkgZG9jdW1lbnQ7Ci0JCVN0eWxlU2hlZXRMaXN0IHNzbCA9IGRzLmdldFN0eWxlU2hlZXRzKCk7Ci0JCWlmIChzc2wuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlDU1NTdHlsZVNoZWV0IHNzID0gKENTU1N0eWxlU2hlZXQpIHNzbC5pdGVtKDApOwotCQkJc3MuZGVsZXRlUnVsZSgxKTsKLQkJfQotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlMaW5rU3R5bGUgbHMgPSAoTGlua1N0eWxlKSBzdHlsZTsKLQkJQ1NTU3R5bGVTaGVldCBzczIgPSAoQ1NTU3R5bGVTaGVldCkgbHMuZ2V0U2hlZXQoKTsKLQkJaWYgKHNzMiAhPSBudWxsKSB7Ci0JCQlzczIuZGVsZXRlUnVsZSgwKTsKLQkJfQotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9TdHlsZUFkYXB0ZXJQZXJmVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1N0eWxlQWRhcHRlclBlcmZUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMmM5MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1N0eWxlQWRhcHRlclBlcmZUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogCQlNYXNha2kgU2FpdG9oIChNU0FJVE9IQGpwLmlibS5jb20pCi0gKgkJU2VlIEJ1ZyAxNTMwMDAgIFN0eWxlIEFkYXB0ZXJzIHNob3VsZCBiZSBsYXppZXIKLSAqCQlodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMDAwCi0gKgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLkxpbmtTdHlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFN0eWxlQWRhcHRlclBlcmZUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogY3JpdGVyaWEgZm9yICJmYWlsIiwgaW4gbXNlY3MKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1BWF9FWFBFQ1RFRF9USU1FID0gNDAwMDsKLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmb3JtYW5jZSgpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbCI7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSksIG51bGwpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSURPTU1vZGVsKSB7Ci0JCQkJSURPTURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCQlOb2RlTGlzdCBub2RlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuU1RZTEUpOwotCQkJCWlmIChub2RlcyAhPSBudWxsICYmIG5vZGVzLmdldExlbmd0aCgpID4gMCkgewotCQkJCQlOb2RlIG5vZGUgPSBub2Rlcy5pdGVtKDApOwotCQkJCQlpZiAobm9kZSBpbnN0YW5jZW9mIExpbmtTdHlsZSkgewotCQkJCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCQkJKChMaW5rU3R5bGUpIG5vZGUpLmdldFNoZWV0KCk7Ci0JCQkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWQgdGltZSA9ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCkpOwotCQkJCQkJLy8gVE9ETzogd2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBzb21ldGhpbmcgbGlrc2Ugby5lLmNvcmUucnVudGltZS5QZXJmb3JtYW5jZVN0YXRzCi0JCQkJCQkvLyBJIHBpY2tlZCB0aGUgZm9sbG93aW5nIGZhaWwgY3JpdGVyaWEgc2ltcGxlIHNpbmNlIGJlZm9yZSBmaXgsIHRoZSBwcmludGxpbiByZXBvcnRzIGFib3V0IDcwMDAgCi0JCQkJCQkvLyBvbiBteSBjb21wdXRlciwgYnV0IHdpdGggZml4LCByZXBvcnRlZCBhYm91dCAxMDAwLiAKLQkJCQkJCS8vIFRoZSBhcHByb3ByaWF0ZSB0aW1lIG1heSB2YXJ5IGdyZWF0bHkgZGVwZW5kaW5nIG9uIHRoZSBidWlsZC90ZXN0IG1hY2hpbmUuIAotCQkJCQkJLy8gVGhpcyBpcyBqdXN0IHRvIGNhdGNoIHNvbWUgbGFyZ2UgY2hhbmdlIGluIGJlaGF2aW9yCi0JCQkJCQlsb25nIGVsYXBzZWRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydDsKLQkJCQkJCWlmIChlbGFwc2VkVGltZSA+IE1BWF9FWFBFQ1RFRF9USU1FKSB7Ci0JCQkJCQkJZmFpbCgiZ2V0U2hlZXQgdG9vayBsb25nZXIgdGhhbiBleHBlY3RlZCB0aGUgZXhwZWN0ZWQgIiArIE1BWF9FWFBFQ1RFRF9USU1FICsibXMiKTsKLQkJCQkJCX0gCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0OGE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKQotCQkJZm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKLQl9Ci0JCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogQHBhcmFtIGZpbGVuYW1lIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlzY29ubmVjdENvbm5lY3QoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCWFzc2VydE5vdE51bGwoInBhcnRpdGlvbmVyIHdhcyBudWxsIGZvciBzRG9jOiIgKyBzRG9jLCBwYXJ0aXRpb25lcik7Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmRpc2Nvbm5lY3QoKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBkaXNjb25uZWN0aW5nIHcvOiIgK3NEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCQl0cnkgewotCQkJCQlzdHAuY29ubmVjdChzRG9jKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBjb25uZWN0aW5nIHcvOiIgKyBzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNDsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUNMQVJBVElPTiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MMigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNzsKLQkJLy9UT0RPIE5pdGluLCB3ZSBuZWVkIHRvIHJldmlldyB0aGUgVW5rbm93biB0byBTY3JpcHQgY2hhbmdlICg4LzEvMDMsIDk6MDBQTSkKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUwzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxOwotCQlTdHJpbmcgZmlsZSA9ICJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbCI7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoZmlsZSk7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCi0JCS8vIDEyMSBpZiBDUkxGCi0JCS8vICBJVHlwZWRSZWdpb24gc2NyaXB0UGFydGl0aW9uID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMjEpOwotCQkvLyAxMTYgaWYgTEYgb3IgQ1Igb25seQotCQkvLyAgSVR5cGVkUmVnaW9uIHNjcmlwdFBhcnRpdGlvbiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTIxKTsKLQotCQlJVHlwZWRSZWdpb24gcGFydDEgPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDEyMSk7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0MiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTE2KTsKLQotLy8JCWFzc2VydEVxdWFscygicGFydGl0aW9uIGlzIHdyb25nIHR5cGUhIiwgc2NyaXB0UGFydGl0aW9uLmdldFR5cGUoKSwgSUhUTUxQYXJ0aXRpb25zLlNUX1NDUklQVCk7Ci0JCS8vIHRoZSBjcml0aWNhbCBwb3NpdGlvbiBpcyBzdXJyb3VuZGVkIHdpdGggSFRNTCA+IDUgY2hhcmFjdGVycyBpbiBlaXRoZXIgZGlyZWN0aW9uOyB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaAotCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb24gaXMgd3JvbmcgdHlwZSEgOigiICsgcGFydDEuZ2V0VHlwZSgpICsgInwiICsgcGFydDIuZ2V0VHlwZSgpICsgIikiLCBwYXJ0MS5nZXRUeXBlKCkuZXF1YWxzKElIVE1MUGFydGl0aW9ucy5TQ1JJUFQpIHx8IHBhcnQyLmdldFR5cGUoKS5lcXVhbHMoSUhUTUxQYXJ0aXRpb25zLlNDUklQVCkpOwotCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb24gaXMgbm90IHplcm8gbGVuZ3RoISIsIChwYXJ0MS5nZXRMZW5ndGgoKSA9PSAwIHx8IHBhcnQyLmdldExlbmd0aCgpID09IDApKTsKLQl9Ci0JCi0JLyoqCi0JICogRW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBwYXJ0aXRpb25zIGFyZSBhbGwgYWRqYWNlbnQgdG8gb25lIGFub3RoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1NlYW1zKCkgewotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlpbnQgb2Zmc2V0ID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbnMgYXJlIG5vdCBjb250aWd1b3VzISIsIHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldCk7Ci0JCQlvZmZzZXQgPSBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpICsgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0aXRpb25lcgotCSAqIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJaW5TdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0oIiIpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCi0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBzaW5nbGUgcGFydGl0aW9uIGF0IHRoZSBnaXZlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBmaWxlLCB1c2luZyB0aGUKLQkgKiBkZWZhdWx0IHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4gIFRoaXMgdGVzdCBhbGxvd3MgZm9yIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGgKLQkgKiBwYXJ0aXRpb25pbmcgYmVoYXZpb3IuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEByZXR1cm4gSVR5cGVkUmVnaW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uIGdldFBhcnRpdGlvblRlc3QoU3RyaW5nIGZpbGVuYW1lLCBpbnQgb2Zmc2V0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQlwYXJ0aXRpb25zID0gbnVsbDsKLQkJSVR5cGVkUmVnaW9uIHBhcnRpdGlvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJ0aXRpb24ob2Zmc2V0KTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJdHJ5IHsKLQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uLmdldE9mZnNldCgpLCBwYXJ0aXRpb24uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb24gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCX0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJcmV0dXJuIHBhcnRpdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGFyZSBvZiB0aGUgZ2l2ZW4gcGFydGl0aW9uIHR5cGVzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblR5cGVzKElUeXBlZFJlZ2lvbiBhY3R1YWxUeXBlZFJlZ2lvbnNbXSwgU3RyaW5nIGV4cGVjdGVkVHlwZXNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpKyspCi0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiB0eXBlIG1pc21hdGNoZWQiLCBleHBlY3RlZFR5cGVzW2ldLCBhY3R1YWxUeXBlZFJlZ2lvbnNbaV0uZ2V0VHlwZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGJlZ2luIGF0IHRoZSBnaXZlbiBvZmZzZXRzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblJlZ2lvbnMoSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uc1tdLCBpbnQgb2Zmc2V0c1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJvZmZzZXQgbWlzbWF0Y2hlZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0c1tpXSk7Ci0JCQlpZiAoaSA+IDApIHsKLQkJCQlhc3NlcnRFcXVhbHMoImxlbmd0aHMgbWlzYWxpZ25lZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRPZmZzZXQoKSArIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTBmZmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgU1lTVEVNIG5vbnNlbnNlPgotPGh0bWw+Ci08Ym88IS0tY29tbWVudHMtLT5keT4KLWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci08L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDI4NmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDIuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4ZGFmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxodG1sPjxoZWFkPgotPE1FVEEgY3JlYXRvcj13c3NhLzQuMHByZTExOT4KLTx0aXRsZT5TY3JpcHQgVGVzdHM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08U2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij48L1NDUklQVD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNzhlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTA0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjgzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFNvZnR3YXJlIERldmVsb3BtZW50IFBsYXRmb3JtIj4KLTxUSVRMRT5lbXB0eS5odG08L1RJVExFPgotPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KLTwhLS0KLS5jbGFzczAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxOSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxOSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS0tPgotPC9TVFlMRT4KLTwvSEVBRD4KLTxCT0RZPgotPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBjb2xzcGFuPSIyIj48VEFCTEUgYm9yZGVyPSIxIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJPC9UQk9EWT4KLQkJCTwvVEFCTEU+Ci0JCQk8L1REPjwvVFI+Ci0JCTxUUj4KLQkJCTxURCByb3dzcGFuPSI0Ij4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCQk8VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIxIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj48VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIxIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj48VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIxIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj48VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIxIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JPC9UQk9EWT4KLTwvVEFCTEU+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Db21tb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRlMTZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0NvbW1vblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9EYXRlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9EYXRlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTcxMGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlVXRpbCB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWxsVGVzdHMuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93ID0gbnVsbDsKLQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm93KCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSBvbmNlLCBzbyB3aG9sZSBydW4gYXMgc2FtZSB0aW1lc3RhbXAKLQkJaWYgKERhdGVVdGlsLm5vdyA9PSBudWxsKSB7Ci0JCQlEYXRlRm9ybWF0IGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJRGF0ZSB0b2RheSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJCURhdGVVdGlsLm5vdyA9IGZvcm1hdC5mb3JtYXQodG9kYXkpOwotCQl9Ci0JCXJldHVybiBEYXRlVXRpbC5ub3c7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Yjk3NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy51dGlsLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb21tb25FT0wgPSAiXHJcbiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0KLQlzdGF0aWMgRmlsZSBwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBudWxsOwotCXN0YXRpYyBwcml2YXRlIFN0cmluZyBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBub3RUcmllZFlldCA9IHRydWU7Ci0Jc3RhdGljIGludCB1bmlxdWVOdW0gPSAwOwotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBEaXJGaWxlbmFtZUZpbHRlciBpbXBsZW1lbnRzIEZpbGVuYW1lRmlsdGVyIHsKLQkJU3RyaW5nIHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXM7Ci0KLQkJcHVibGljIERpckZpbGVuYW1lRmlsdGVyKFN0cmluZyBzdGFydE9mRGlyTmFtZSkgewotCQkJc3RhcnRPZkFjY2VwdGFibGVOYW1lcyA9IHN0YXJ0T2ZEaXJOYW1lOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEBzZWUgamF2YS5pby5GaWxlRmlsdGVyI2FjY2VwdChGaWxlKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUsIFN0cmluZyBmaWxlbmFtZSkgewotCQkJLy8gd2UnbGwganVzdCBhc3N1bWUgaWYgaXQgc3RhcnRzIHdpdGggcmlnaHQga2V5LCBpdCBpcyBhIGRpcmVjdG9yeSAuLi4gZm9yIG5vdwotCQkJcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoc3RhcnRPZkFjY2VwdGFibGVOYW1lcyk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeVJvb3ROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID09IG51bGwgJiYgbm90VHJpZWRZZXQpIHsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCi0JCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRQYXRoKCk7Ci0KLQkJCUZpbGUgcGx1Z2luSG9tZURpciA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCQlGaWxlbmFtZUZpbHRlciBkaXJGaWx0ZXIgPSBuZXcgRGlyRmlsZW5hbWVGaWx0ZXIoZGlyZWN0b3J5Um9vdE5hbWUpOwotCQkJRmlsZVtdIGFsbERpcnMgPSBwbHVnaW5Ib21lRGlyLmxpc3RGaWxlcyhkaXJGaWx0ZXIpOwotCi0JCQkvLyBhc3N1bWUgZmlyc3QgaW4gbGlzdCBpcyBuZXdlc3QsIHRoZW4gc3RhcnQgbG9va2luZyB3aXRoIHRoZSAKLQkJCS8vIHNlY29uZCBpdGVtIC4uLiBqdXN0IHRvIGF2b2lkICJudWxsIiBjYXNlIGNoZWNraW5nCi0JCQlpZiAoYWxsRGlycy5sZW5ndGggPiAwKSB7Ci0JCQkJRmlsZSBjdXJyZW50TmV3ZXN0ID0gYWxsRGlyc1swXTsKLQkJCQlmb3IgKGludCBpID0gMTsgaSA8IGFsbERpcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJRmlsZSBjdXJyZW50ID0gYWxsRGlyc1tpXTsKLQkJCQkJLy8gTk9URTogd2UgZ28gYnkgbW9kaWZpZWQgZGF0ZSwgbm90IGJ5IHRoZSBhY3R1YWwgdGltZSBzdGFtcCBpbiBuYW1lLgotCQkJCQkvLyBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgbm9ybWFsIGNhc2VzLCBidXQgbWF5IG5vdCBpZiBzb21lb25lIGRvZXMgc29tZQotCQkJCQkvLyAiZnVubnkiIGNvcHlpbmcsIG9yIHVwZGF0aW5nIGZyb20gcmVwb3NpdG9yeS4KLQkJCQkJaWYgKGN1cnJlbnQubGFzdE1vZGlmaWVkKCkgPiBjdXJyZW50TmV3ZXN0Lmxhc3RNb2RpZmllZCgpKSB7Ci0JCQkJCQljdXJyZW50TmV3ZXN0ID0gY3VycmVudDsKLQkJCQkJfQotCQkJCX0KLQkJCQlwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBjdXJyZW50TmV3ZXN0OwotCQkJfQotCQkJbm90VHJpZWRZZXQgPSBmYWxzZTsKLQkJfQotCQlyZXR1cm4gcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBtYWtlRmlsZUZvcihTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7ICAvLyROT04tTkxTLTEkCi0JCVVSTCBsb2NhbFVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSBsb2NhbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyB0b3RhbERpcmVjdG9yeSA9IGluc3RhbGxQYXRoICsgZGlyZWN0b3J5OwotCQlTdHJpbmcgdG90YWxQYXRoID0gdG90YWxEaXJlY3RvcnkgKyAiLyIgKyBmaWxlbmFtZTsKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCS8vVVJMIGZpbmFsdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh0b3RhbFVSTCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQkvLyBhIGxpdHRsZSBzYWZldHkgbmV0LCBiZSBzdXJlIHRoZSBwcmV2aW91cyBuZXdlc3QgZGlyZWN0b3J5Ci0JCQkvLyBpcyBpbml0aWFsaXplZCwganVzdCBpbiBjYXNlIG5vIG9uZSBlbHNlIGhhcyBkb25lIHNvCi0JCQlpZiAodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggIT0gbnVsbCAmJiB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeC5sZW5ndGgoKSA+IDApIHsKLQkJCQlGaWxlVXRpbC5nZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpOwotCQkJfQotCQkJLy8gbm93IGl0cyAic2FmZSIgdG8gbWFrZSB0aGUgbmV3IG9uZQotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEp1c3QgYSBnZW5lcmFsIHV0aWxpdHkgbWV0aG9kCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFeHRlbnNpb24oU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCVN0cmluZyBleHRlbnNpb24gPSBudWxsOwotCQlpbnQgZG90UG9zdGlvbiA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0JCWlmIChkb3RQb3N0aW9uID4gLTEpIHsKLQkJCWV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhkb3RQb3N0aW9uICsgMSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlleHRlbnNpb24gPSBuZXcgU3RyaW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGV4dGVuc2lvbjsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBtZXRob2QgdG8gZW5zdXJlIHRoZSBsb2cKLQkgKiBkaXJlY3RvcnkgZXhpc3RzLCBhbmQgcmV0dXJucyB0aGUgbmFtZS4gCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TG9nRGlyZWN0b3J5KCkgewotCQlpZiAobG9nU3ViRGlyZWN0b3J5UGF0aCA9PSBudWxsKSB7Ci0JCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9ICIvbG9ncyI7Ci0JCQlGaWxlIGRpciA9IG5ldyBGaWxlKG1haW5EaXJlY3RvcnkpOwotCQkJZW5zdXJlRXhpc3RzKGRpcik7Ci0JCQlTdHJpbmcgc3ViRGlyZWN0b3J5ID0gVGltZXN0YW1wVXRpbC50aW1lc3RhbXAoKTsKLQkJCWxvZ1N1YkRpcmVjdG9yeVBhdGggPSBtYWluRGlyZWN0b3J5ICsgIi8iICsgc3ViRGlyZWN0b3J5OwotCQkJRmlsZSBzdWJkaXIgPSBuZXcgRmlsZShsb2dTdWJEaXJlY3RvcnlQYXRoKTsKLQkJCWVuc3VyZUV4aXN0cyhzdWJkaXIpOwotCQl9Ci0JCXJldHVybiBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBlbnN1cmVFeGlzdHMoRmlsZSBkaXIpIHsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBlcmZvcm1hbmNlT3V0cHV0TG9nTmFtZSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gRmlsZVV0aWwuZ2V0TG9nRGlyZWN0b3J5KCk7Ci0JCVN0cmluZyBleHRlbnNpb24gPSAiLm91dCI7Ci0JCVN0cmluZyBiYXNlTmFtZSA9ICJzZWRUZXN0cyI7Ci0JCWxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCVN0cmluZyBub3dTdHIgPSBTdHJpbmcudmFsdWVPZihub3cpOwotCQlyZXN1bHQgPSBkaXJlY3RvcnlOYW1lICsgRmlsZVV0aWwuZkZpbGVTZXBhcmF0b3IgKyBiYXNlTmFtZSArIG5vd1N0ciArIGV4dGVuc2lvbjsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JcHVibGljIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QiICsgdW5pcXVlTnVtKysgKyAiLmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCQkvLyBvZiBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoY29tbW9uRU9MKTsKLQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiAgKElET01Nb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzYmE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOWEwZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0UnVudGltZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLQotCi0vKioKLSAqIFRoZSBTb3VyY2VFZGl0aW5nUnVudGltZUV4Y2VwdGlvbiBpcyBvZnRlbiB0aHJvd24gYnkgU291cmNlIEVkaXRvciBtZXRob2RzIHdoZW4KLSAqIGEgc2VydmljZSB3ZSB1c2UgdGhyb3dzIGEgY2hlY2tlZCBleGNlcHRpb24sIGJ1dCB3ZSB3YW50IHRvIGNvbnZlcnQgYW5kIHRyZWF0Ci0gKiBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiAoU3VjaCBhcyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiBpcyBhIGNvbW1vbiBleGFtcGxlKS4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogRGVmYXVsdCA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCXByaXZhdGUgVGhyb3dhYmxlIG9yaWdpbmFsRXhjZXB0aW9uOwotCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbihTdHJpbmcgcykgewotCQlzdXBlcihzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gd3JhcHBlciBhbm90aGVyIGV4Y2VwdGlvbi4KLQkgKi8KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oVGhyb3dhYmxlIHQpIHsKLQkJc3VwZXIoKTsKLQkJb3JpZ2luYWxFeGNlcHRpb24gPSB0OwotCX0KLQotCS8qKgotCSAqIFRoaXMgZm9ybSBvZiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCB0byB3cmFwcGVyIGFub3RoZXIgZXhjZXB0aW9uLCBidXQgc3RpbGwKLQkgKiBwcm92aWRlIGEgbmV3IGRlc2NyaXB0aXZlIG1lc3NhZ2UuCi0JICovCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKFRocm93YWJsZSB0LCBTdHJpbmcgcykgewotCQlzdXBlcihzKTsKLQkJb3JpZ2luYWxFeGNlcHRpb24gPSB0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQkJaWYgKChyZXN1bHQgIT0gbnVsbCkgJiYgKCFyZXN1bHQuZW5kc1dpdGgoIi4iKSkpIC8vJE5PTi1OTFMtMSQKLQkJCXJlc3VsdCA9IHJlc3VsdCArICIuIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAob3JpZ2luYWxFeGNlcHRpb24gIT0gbnVsbCkgewotCQkJU3RyaW5nIGVtYmVkZGVkTWVzc2FnZSA9IG9yaWdpbmFsRXhjZXB0aW9uLmdldE1lc3NhZ2UoKTsKLQkJCS8vIG5vdCBhbGwgZXhjZXB0aW9ucyAoZS5nLiBtYW55IE51bGxQb2ludGVyIGV4Y2VwdGlvbikgaGF2ZSBtZXNzYWdlcwotCQkJU3RyaW5nIG9yaWdpbmFsRXJyb3IgPSAiT3JpZ2luYWwgZXJyb3I6IjsJLy8kTk9OLU5MUy0xJAotCQkJaWYgKGVtYmVkZGVkTWVzc2FnZSAhPSBudWxsKQotCQkJCXJlc3VsdCA9IHJlc3VsdCArICIgICIgKyBvcmlnaW5hbEVycm9yICsgIiAiICsgZW1iZWRkZWRNZXNzYWdlOy8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCQllbHNlCi0JCQkJcmVzdWx0ID0gcmVzdWx0ICsgIiAgIiArIG9yaWdpbmFsRXJyb3IgKyAiICIgKyBvcmlnaW5hbEV4Y2VwdGlvbi50b1N0cmluZygpOy8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgVGhyb3dhYmxlIGdldE9yaWdpbmFsRXhjZXB0aW9uKCkgewotCQlyZXR1cm4gb3JpZ2luYWxFeGNlcHRpb247Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJLy8gd2UgZG9uJ3QgcHV0IHN1cGVyLnRvU3RyaW5nIG9yIGdldENsYXNzIHRvICJoaWRlIiB0aGF0IGl0IHdhcyBhCi0JCS8vIFNvdXJjZUVkaXRpbmcgZXhjZXB0aW9uIChvdGhlcndpc2UsIGZvY3VzIGdvZXMgb24gdGhhdCwKLQkJLy8gaW5zdGVhZCBvZiBvcmlnaW5hbCBleGNlcHRpb24uCi0JCVN0cmluZyBtZXNzYWdlID0gZ2V0TWVzc2FnZSgpOwotCQkvLyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSBudWxsIC4uLiBidXQganVzdCBpbiBjYXNlCi0JCXJldHVybiAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiBzdXBlci50b1N0cmluZygpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0V3JpdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZjU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RXcml0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFdyaXRlciBleHRlbmRzIFN0cmluZ1dyaXRlciB7Ci0JLy8gd2UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gdXNlIHRoZSBzeXN0ZW0gRU9MLCBzaW5jZQotCS8vIHdlIHdhbnQgYSBjb21tb24gb25jZSBhY3Jvc3MgcGxhdGZvcm1zLCBDVlMsIGV0Yy4KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBjb21tb25FT0wgPSAiXHJcbiI7Ci0KLQkvL1N5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgCi0KLQlwdWJsaWMgdm9pZCB3cml0ZWxuKFN0cmluZyBsaW5lKSB7Ci0JCXdyaXRlKGxpbmUpOwotCQl3cml0ZShjb21tb25FT0wpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1RpbWVzdGFtcFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGltZXN0YW1wVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGFjM2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGltZXN0YW1wVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgb25lIHRpbWVzdGFtcCBwZXIgVk0gcnVuLgotICogKFRlY2huaWNhbGx5LCBwZXIgY2xhc3MgbG9hZGluZy4pCi0gKi8KLXB1YmxpYyBjbGFzcyBUaW1lc3RhbXBVdGlsIHsKLQotCXByaXZhdGUgc3RhdGljIERhdGUgdGltZXN0YW1wID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IHNob3J0Rm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkIik7Ci0JLy8JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBsb25nRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93U2hvcnQgPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdGltZXN0YW1wKCkgewotCi0JCWlmIChUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID09IG51bGwpIHsKLQkJCVRpbWVzdGFtcFV0aWwubm93U2hvcnQgPSBzaG9ydEZvcm1hdC5mb3JtYXQoZW5zdXJlVGltZXN0YW1wKCkpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLm5vd1Nob3J0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBlbnN1cmVUaW1lc3RhbXAoKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlICd0aW1lc3RhbXAnIG9uY2UgcGVyIGNsYXNzIGxvYWRpbmcsIAotCQkvLyBzbyB0aGlzICd0aW1lc3RhbXAnIHJlbWFpbnMgdGhlIHNhbWUgZHVyaW5nIAotCQkvLyBlbnRpcmUgcnVuLiAKLQkJaWYgKFRpbWVzdGFtcFV0aWwudGltZXN0YW1wID09IG51bGwpIHsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCVRpbWVzdGFtcFV0aWwudGltZXN0YW1wID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzcwYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJLy8gd2UgZG9udCcgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJLy8gd2UgZG9udCcgY2FyZQotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCS8vIHdlIGRvbid0IGNhcmUKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCS8vIHdlIGRvbid0IGNhcmUKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5MjkyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkhUTUxDb3JlVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL0hUTUxDbGVhbnVwUHJvY2Vzc29yL3Rlc3QxLWV4cGVjdGVkLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvSFRNTENsZWFudXBQcm9jZXNzb3IvdGVzdDEtZXhwZWN0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwNWYyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvSFRNTENsZWFudXBQcm9jZXNzb3IvdGVzdDEtZXhwZWN0ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08YnI+Ci0KLTxici8+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvSFRNTENsZWFudXBQcm9jZXNzb3IvdGVzdDEuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0MS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjlhOWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0MS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxicj4KLQotPGJyPjwvYnI+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvSFRNTENsZWFudXBQcm9jZXNzb3IvdGVzdDItZXhwZWN0ZWQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0Mi1leHBlY3RlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQxNzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0Mi1leHBlY3RlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGJyIC8+Ci0KLTxici8+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvSFRNTENsZWFudXBQcm9jZXNzb3IvdGVzdDIuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0Mi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTk4MGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9IVE1MQ2xlYW51cFByb2Nlc3Nvci90ZXN0Mi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGJyPgotCi08YnI+PC9icj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5OWRmYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1odG1sZW5jb2Rpbmd0ZXN0cy5qYXIKLWphdmFDb21waWxlci5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2OGI1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM5NmZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlcnNpb246IDEuMC40MDEucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLkhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWEzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbGVuY29kaW5ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gaHRtbGVuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcxNGExMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBIVE1MIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDU4ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEVuY29kaW5nVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLlRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUw7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117SFRNTEVuY29kaW5nVGVzdHMuY2xhc3MsIEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKHRoZUNsYXNzLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcyMTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExpc3QgZ2V0RmlsZXNJbkRpcihGaWxlIHRvcERpcikgewotCQlMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlGaWxlW10gdG9wRmlsZXMgPSB0b3BEaXIubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9wRmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCUZpbGUgZmlsZSA9IHRvcEZpbGVzW2ldOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlmaWxlcy5hZGQoZmlsZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkgJiYgIWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJDVlMiKSkgewotCQkJCUxpc3QgaW5uZXJGaWxlcyA9IGdldEZpbGVzSW5EaXIoZmlsZSk7Ci0JCQkJZmlsZXMuYWRkQWxsKGlubmVyRmlsZXMpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MRW5jb2RpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjYyODNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmCi0JCQkvLyB0aHJvd3MgZXhjZXB0aW9uLgotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nICE9IG51bGwpIHsKLQkJCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCQl9Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5odG1sIjsKLQkJLy8gSFRNTCBoYXMgbm8gc3BlYyBkZWZhdWx0IGVuY29kaW5nLiBXaWxsIHVzZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXMuaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUuaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZMRSIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRU5vUXVvdGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vcXVvdGVzVVRGMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyMmVlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuWmlwcGVkVGVzdDsKLQotcHVibGljIGNsYXNzIEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCWJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIFN0cmluZyBmQ2hhcnNldDsKLQotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZVZhbHVlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IHRoaXMuZmlsZUhvbWUgKyB0aGlzLmZpbGVEaXI7Ci0JcHJpdmF0ZSBTdHJpbmcgZlBhZ2VFbmNvZGluZ1ZhbHVlID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBmWE1MRGVjRW5jb2RpbmdOYW1lOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBleHBlY3RlZE5hbWUsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGZpbmFsVG9rZW5UeXBlKSB7Ci0JCXRyeSB7Ci0JCQlkb1Rlc3RGaWxlKEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpLCBleHBlY3RlZE5hbWUsIGZpbmFsVG9rZW5UeXBlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyJcIiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoUmVhZGVyIGZpbGVSZWFkZXIsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJdG9rZW5pemVyID0gbmV3IEhUTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCi0JCUhlYWRQYXJzZXJUb2tlbiByZXN1bHRUb2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IGdldEFwcHJvcHJpYXRlRW5jb2RpbmcoKTsKLQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQlpZiAoZmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIHRva2VuLmdldFR5cGUoKSwgZmluYWxUb2tlblR5cGUuZXF1YWxzKHRva2VuLmdldFR5cGUoKSkpOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGV4cGVjdGVkTmFtZSA9PSBudWxsKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRUb2tlbiA9PSBudWxsKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIFRPRE86IG5lZWQgdG8gd29yayBvbiBjYXNlIGlzc3VlcwotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUudG9VcHBlckNhc2UoKSkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdGRlZmVjdDIyMzM2NSgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLyoqCi0JICogcmV0dXJucyBlbmNvZGluZyBhY2NvcmRpbmcgdG8gcHJpb3JpdHk6IDEuIFhNTCBEZWNsYXJhdGlvbiAyLiBwYWdlCi0JICogZGlyZWN0aXZlIHBhZ2VFbmNvZGluZyBuYW1lIDMuIHBhZ2UgZGlyZWN0aXZlIGNvbnRlbnRUeXBlIGNoYXJzZXQgbmFtZQotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEFwcHJvcHJpYXRlRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlpZiAodGhpcy5mWE1MRGVjRW5jb2RpbmdOYW1lICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZlhNTERlY0VuY29kaW5nTmFtZTsKLQkJfQotCQllbHNlIGlmICh0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKSB7Ci0JCQlyZXN1bHQgPSB0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZTsKLQkJfQotCQllbHNlIGlmICh0aGlzLmZDaGFyc2V0ICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZkNoYXJzZXQ7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gbnVsbCkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiO1xccypjaGFyc2V0XFxzKj1cXHMqIik7Ci0JCVN0cmluZ1tdIHBhcnRzID0gcGF0dGVybi5zcGxpdChjb250ZW50VHlwZSk7Ci0JCWlmIChwYXJ0cy5sZW5ndGggPiAwKSB7Ci0JCQkvLyBpZiBvbmx5IG9uZSBpdGVtLCBpdCBjYW4gc3RpbGwgYmUgY2hhcnNldCBpbnN0ZWFkIG9mCi0JCQkvLyBjb250ZW50VHlwZQotCQkJaWYgKHBhcnRzLmxlbmd0aCA9PSAxKSB7Ci0JCQkJaWYgKHBhcnRzWzBdLmxlbmd0aCgpID4gNikgewotCQkJCQlTdHJpbmcgY2hlY2tGb3JDaGFyc2V0ID0gcGFydHNbMF0uc3Vic3RyaW5nKDAsIDcpOwotCQkJCQlpZiAoY2hlY2tGb3JDaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoImNoYXJzZXQiKSkgewotCQkJCQkJaW50IGVxcG9zID0gcGFydHNbMF0uaW5kZXhPZignPScpOwotCQkJCQkJZXFwb3MgPSBlcXBvcyArIDE7Ci0JCQkJCQlpZiAoZXFwb3MgPCBwYXJ0c1swXS5sZW5ndGgoKSkgewotCQkJCQkJCXRoaXMuZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCXRoaXMuZkNoYXJzZXQgPSB0aGlzLmZDaGFyc2V0LnRyaW0oKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGZDb250ZW50VHlwZSA9IHBhcnRzWzBdOwotCQkJfQotCi0JCX0KLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKLQkJCXRoaXMuZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCXRoaXMuZkNoYXJzZXQgPSBudWxsOwotCQkvKgotCQkgKiBpZiAodG9rZW5UeXBlID09IFhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuWE1MRGVsRW5jb2RpbmcpIHsgaWYKLQkJICogKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsgSVRleHRIZWFkUmVnaW9uIHZhbHVlVG9rZW4gPQotCQkgKiB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7IFN0cmluZyB2YWx1ZVRva2VuVHlwZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VHlwZSgpOyBpZiAoaXNMZWdhbCh2YWx1ZVRva2VuVHlwZSkpIHsgcmVzdWx0VmFsdWUgPQotCQkgKiB2YWx1ZVRva2VuLmdldFRleHQoKTsgaWYgKERFQlVHKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiWE1MIEhlYWQKLQkJICogVG9rZW5pemVyIEZvdW5kIEVuY29kaW5nOiAiICsgcmVzdWx0VmFsdWUpOyB9IH0gfSB9Ci0JCSAqLwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gZmluYWxUb2tlbiA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odG9rZW4pOwotCQkJfQotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCWlmKGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbSh0b2tlblR5cGUpKSB7Ci0JCQkJCi0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IEhUTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLk1ldGFUYWdDb250ZW50VHlwZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlpZiAodGhpcy5ERUJVRykgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHZhbHVlVG9rZW4pOwotCQkJCQl9Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCXRoaXMuZkNvbnRlbnRUeXBlVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQlpZiAodGhpcy5mQ29udGVudFR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQlwYXJzZUNvbnRlbnRUeXBlVmFsdWUodGhpcy5mQ29udGVudFR5cGVWYWx1ZSk7Ci0JCX0KLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGUgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZDaGFyc2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFIHx8IHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkxFKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mQ2hhcnNldCA9ICJVVEYtMTYiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIGNhbkhhbmRsZUFzVW5pY29kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExhcmdlQ2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMYXJnZU5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJMYXJnZU5vRW5jb2RpbmcuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVEKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJNdWx0aU5vbkRlZmF1bHQuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdG5vcXVvdGVzVVRGMTZsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vcXVvdGVzVVRGMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JLyoKLQkJc3VuLmlvLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uCi0JCWF0IHN1bi5pby5CeXRlVG9DaGFyVVRGOC5jb252ZXJ0KEJ5dGVUb0NoYXJVVEY4LmphdmE6MjYyKQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuY29udmVydEludG8oU3RyZWFtRGVjb2Rlci5qYXZhOjMxNCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozNjQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2Rlci5yZWFkKFN0cmVhbURlY29kZXIuamF2YToyNTApCi0JCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjIxMikKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IVE1MSGVhZFRva2VuaXplci55eV9hZHZhbmNlKEhUTUxIZWFkVG9rZW5pemVyLmphdmE6MzQwKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyLnByaW1HZXROZXh0VG9rZW4oSFRNTEhlYWRUb2tlbml6ZXIuamF2YTo0NzcpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXIuZ2V0TmV4dFRva2VuKEhUTUxIZWFkVG9rZW5pemVyLmphdmE6MjMyKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLnBhcnNlSGVhZGVyKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTc1KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTo1NykKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MSGVhZFRva2VuaXplclRlc3Rlci5kb1Rlc3RGaWxlKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MzcpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIudGVzdFVURjE2Qk9NKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MjkzKQotCSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZCT00uaHRtbCI7Ci0JCVppcHBlZFRlc3QgdGVzdCA9IG5ldyBaaXBwZWRUZXN0KCk7Ci0JCXRlc3Quc2V0VXAoKTsKLQkJSUZpbGUgZmlsZSA9IHRlc3QuZ2V0RmlsZShmaWxlbmFtZSk7Ci0JCWFzc2VydE5vdE51bGwoZmlsZSk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZS5nZXRMb2NhdGlvblVSSSgpLmdldFBhdGgoKSk7Ci0JCWRvVGVzdEZpbGUoZmlsZVJlYWRlciwgIlVURi0xNiIsIG51bGwpOwotCQl0ZXN0LnNodXREb3duKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdlYTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbCIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbCIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbCIsIG51bGwpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYmY3NzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YjVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGNhNjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2RkMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzcyMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBlNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTMwYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGNkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9dGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiZDUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTkxNWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZmU2OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGVmYjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTgzNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1odG1sdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCi1qYXZhQ29tcGlsZXIuaHRtbHVpdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZjQwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjA3OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDEucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkhUTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS51aS5pZGUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM4YzgxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBodG1sdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBodG1sdWl0ZXN0cy5qYXIKLXNvdXJjZS5odG1sdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODI1NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIGZvciBIVE1MIFRlc3RzCi12aWV3Lm5hbWUuMCA9IEVtYmVkZGVkIEhUTUwgU3RydWN0dXJlZCBUZXh0IFZpZXdlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjlkY2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SFRNTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEhUTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGFkMDllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5IVE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSFRNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8PSIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCBkZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSFRNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MjU3YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZhbGlkYXRpb24uVGVzdEhUTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLQotCi0KLXB1YmxpYyBjbGFzcyBIVE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSFRNTFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEhUTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkhUTUwgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEhUTUxVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChUZXN0SFRNTFZhbGlkYXRvci5zdWl0ZSgpKTsKLQkJLy8JCWFkZFRlc3QobmV3IFNTRU1vZGVsVGVzdFN1aXRlKCkpOwotCQlhZGRUZXN0KFRlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5zdWl0ZSgpKTsKLQkJYWRkVGVzdChUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuc3VpdGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VjYWVjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MVUlUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEhUTUxVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBIVE1MVUlUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5TU0VGb3JIVE1MVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEhUTUxVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBIVE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGYxNGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4NjUyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi0vKioKLSAqIFNvbWUgdXRpbGl0aWVzIGZvciBjcmVhdGluZyBwcm9qZWN0cywgYW5kIGNvcHlpbmcgZmlsZXMgaW50byB0aGUgd29ya3NwYWNlLgotICogQ29waWVkIGZyb20gSlNQIFVJIHRlc3RzLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuUHJvamVjdFV0aWwgQ29weSAtIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuUHJvamVjdFV0aWwKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBIVE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOwotCQl9Ci0JfQotCi0Jc3RhdGljIElGaWxlIF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gSFRNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcm9vdEVudHJ5IC0gYXZvaWQgdHJhaWxpbmcgc2VwYXJhdG9ycwotCSAqIEBwYXJhbSBmdWxsVGFyZ2V0UGF0aAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW50cnluYW1lCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIFRFU1QgcGx1Z2luIHN0YXJ0aW5nIHcvIGEgIi8iIChlZy4KLQkgKiAgICAgICAgICAgICIvdGVzdGZpbGVzL2J1Z251bWJlci9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcGFyYW0gZnVsbFBhdGgKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8ganVuaXQgdGVzdCB3b3JrcGFjZSAoZWcuCi0JICogICAgICAgICAgICAiL215cnVudGltZXByb2ovc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGVbMF07Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxOThjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwudGFnaW5mby5IVE1MVGFnSW5mb0hvdmVyUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkhUTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBodG1sIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RHZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuU09VUkNFVklFV0VSQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcywgby5nZXRDbGFzcygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBIVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzLCBvLmdldENsYXNzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIFhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzLCBvLmdldENsYXNzKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJTGlzdCBjb25maWdzID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb25zKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCk7Ci0JCWFzc2VydEZhbHNlKCJubyBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBjb25maWdzLmlzRW1wdHkoKSk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdzLnNpemUoKSAmJiAhZm91bmQ7IGkrKykgewotCQkJZm91bmQgPSBjb25maWdzLmdldChpKS5nZXRDbGFzcygpID09IEhUTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3M7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBmb3VuZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzdiOTRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwuSFRNTFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlFZGl0b3JQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCVBsdWdpbiBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gSFRNTFVJUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdhOWUwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLQotcHVibGljIGNsYXNzIFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKiogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlc2UgdGVzdHMgd2lsbCB1c2UgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycyI7Ci0JCi0JLyoqIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVwZW5kIG9uIEpTRFQgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9TQ1JJUFRfTkFUVVJFX0lEID0gIm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuanNOYXR1cmUiOwotCQotCS8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0IjsKLQkKLQkvKiogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWxyZWFkeSBvcGVuIGVkaXRvcnMgc28gdGhhdCB0aGUgdGVzdHMgZG9uJ3QgZ28gdGhyb3VnaAotCSAqIHRoZSB0cm91YmxlIG9mIG9wZW5pbmcgdGhlIHNhbWUgZWRpdG9ycyBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTWFwIGZGaWxlVG9FZGl0b3JNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycygpIHsKLQkJc3VwZXIoIlRlc3QgRW1iZWRlZCBDU1MgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlVzZSB0aGlzIG1ldGhvZCB0byBhZGQgdGhlc2UgdGVzdHMgdG8gYSBsYXJnZXIgdGVzdCBzdWl0ZSBzbyBzZXQgdXAKLQkgKiBhbmQgdGVhciBkb3duIGNhbiBiZSBwZXJmb3JtZWQ8L3A+Ci0JICogCi0JICogQHJldHVybiBhIHtAbGluayBUZXN0U2V0dXB9IHRoYXQgd2lsbCBydW4gYWxsIG9mIHRoZSB0ZXN0cyBpbiB0aGlzIGNsYXNzCi0JICogd2l0aCBzZXQgdXAgYW5kIHRlYXIgZG93bi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSB0cyA9IG5ldyBUZXN0U3VpdGUoVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmNsYXNzLCAiVGVzdCBFbWJlZGVkIENTUyBDb250ZW50IEFzc2lzdCBDb21wdXRlcnMiKTsKLQkJcmV0dXJuIG5ldyBUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCh0cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvclByb3Bvc2Fsc19TdHlsZVRhZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7OTAsIDAsIDkwLCA5MH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDksIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2Fsc19TdHlsZVRhZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDEyLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uVmFsdWVQcm9wb3NhbHNfU3R5bGVUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezExLCAwLCAxMSwgMTF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAxMywgMTYsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoU2VsZWN0b3JQcm9wb3NhbHNfU3R5bGVUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezIwLCAwLCAyMCwgMjB9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAyNCwgMSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblByb3Bvc2Fsc19TdHlsZVRhZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDE3LCAxNCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblZhbHVlUHJvcG9zYWxzX1N0eWxlVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs0LCAwLCA0LCA0fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMjEsIDIzLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uUHJvcGVydHlQcm9wb3NhbHNfU3BhY2VkUXVvdGVzX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMjIsIDAsIDEyMiwgMTIyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMzEsIDE0LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uUHJvcGVydHlQcm9wb3NhbHNfRW1wdHlRdW90ZXNfU3R5bGVBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEyMiwgMCwgMTIyLCAxMjJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAzMywgMTIsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25WYWx1ZVByb3Bvc2Fsc19TdHlsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTEsIDAsIDExLCAxMX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDM1LCAyNiwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblByb3Bvc2Fsc19TdHlsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDM3LCAyNSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblZhbHVlUHJvcG9zYWxzX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs0LCAwLCA0LCA0fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMzksIDM0LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uUHJvcGVydHlQcm9wb3NhbHNfQWZ0ZXJTZW1pY29sb25fTm9TcGFjZV9TdHlsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDQxLCA0MCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblByb3BlcnR5UHJvcG9zYWxzX0FmdGVyU2VtaWNvbG9uX0JlZm9yZVNwYWNlX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMjIsIDAsIDEyMiwgMTIyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgNDMsIDQwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uUHJvcGVydHlQcm9wb3NhbHNfQWZ0ZXJTZW1pY29sb25fQWZ0ZXJTcGFjZV9TdHlsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDQzLCA0MSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlJ1biBhIHByb3Bvc2FsIHRlc3QgYnkgb3BlbmluZyB0aGUgZ2l2ZW4gZmlsZSBhbmQgaW52b2tpbmcgY29udGVudCBhc3Npc3QgZm9yCi0JICogZWFjaCBleHBlY3RlZCBwcm9wb3NhbCBjb3VudCBhdCB0aGUgZ2l2ZW4gbGluZSBudW1iZXIgYW5kIGxpbmUgY2hhcmFjdGVyCi0JICogb2Zmc2V0IGFuZCB0aGVuIGNvbXBhcmUgdGhlIG51bWJlciBvZiBwcm9wb3NhbHMgZm9yIGVhY2ggaW52b2NhdGlvbiAocGFnZXMpIHRvIHRoZQotCSAqIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlTmFtZQotCSAqIEBwYXJhbSBsaW5lTnVtCi0JICogQHBhcmFtIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQcm9wb3NhbENvdW50cwotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5Qcm9wb3NhbFRlc3QoU3RyaW5nIGZpbGVOYW1lLAotCQkJaW50IGxpbmVOdW0sIGludCBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0LAotCQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJCi0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKGZpbGVOYW1lKTsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJaW50IG9mZnNldCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQobGluZU51bSkgKyBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0OwotCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzID0gZ2V0UHJvcG9zYWxzKHZpZXdlciwgb2Zmc2V0LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aCk7Ci0JCQotCQl2ZXJpZnlQcm9wb3NhbENvdW50cyhwYWdlcywgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPkludm9rZSBjb250ZW50IGFzc2lzdCBvbiB0aGUgZ2l2ZW4gdmlld2VyIGF0IHRoZSBnaXZlbiBvZmZzZXQsIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBhZ2VzCi0JICogYW5kIHJldHVybiB0aGUgcmVzdWx0cyBvZiBlYWNoIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcGFyYW0gcGFnZUNvdW50Ci0JICogQHJldHVybgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gZ2V0UHJvcG9zYWxzKFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgaW50IG9mZnNldCwgaW50IHBhZ2VDb3VudCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vc2V0dXAgdGhlIHZpZXdlcgotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCQlDb250ZW50QXNzaXN0YW50IGNvbnRlbnRBc3Npc3RhbnQgPSAoQ29udGVudEFzc2lzdGFudCljb25maWd1cmF0aW9uLmdldENvbnRlbnRBc3Npc3RhbnQodmlld2VyKTsKLQkJdmlld2VyLmNvbmZpZ3VyZShjb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uob2Zmc2V0LCAwKTsKLQkJCi0JCS8vZ2V0IHRoZSBwcm9jZXNzb3IKLQkJU3RyaW5nIHBhcnRpdGlvblR5cGVJRCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhcnRpdGlvbihvZmZzZXQpLmdldFR5cGUoKTsKLQkJSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gY29udGVudEFzc2lzdGFudC5nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29yKHBhcnRpdGlvblR5cGVJRCk7Ci0KLQkJLy9maXJlIGNvbnRlbnQgYXNzaXN0IHNlc3Npb24gYWJvdXQgdG8gc3RhcnQKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotCQkgICAgICAgIGdldERlY2xhcmVkTWV0aG9kKCJmaXJlU2Vzc2lvbkJlZ2luRXZlbnQiLCBuZXcgQ2xhc3NbXSB7Ym9vbGVhbi5jbGFzc30pOwotCQlwcml2YXRlRmlyZVNlc3Npb25CZWdpbkV2ZW50TWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG5ldyBPYmplY3RbXSB7Qm9vbGVhbi5UUlVFfSk7Ci0KLQkJLy9nZXQgY29udGVudCBhc3Npc3Qgc3VnZ2VzdGlvbnMKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwYWdlQ291bnRdW107Ci0JCWZvcihpbnQgcCA9IDA7IHAgPCBwYWdlQ291bnQ7ICsrcCkgewotCQkJcGFnZXNbcF0gPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBvZmZzZXQpOwotCQl9Ci0JCQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBlbmRpbmcKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkVuZEV2ZW50TWV0aG9kID0gQ29udGVudEFzc2lzdGFudC5jbGFzcy4KLSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uRW5kRXZlbnQiLCBudWxsKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG51bGwpOwotCQkKLQkJcmV0dXJuIHBhZ2VzOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db21wYXJlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzIHBlciBwYWdlIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHByb3Bvc2FscwotCSAqIHBlciBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSBwYWdlcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlQcm9wb3NhbENvdW50cyhJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcywgaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgewotCQlTdHJpbmdCdWZmZXIgZXJyb3IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvcihpbnQgcGFnZSA9IDA7IHBhZ2UgPCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aDsgKytwYWdlKSB7Ci0JCQlpZihleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdICE9IHBhZ2VzW3BhZ2VdLmxlbmd0aCkgewotCQkJCWVycm9yLmFwcGVuZCgiXG5Qcm9wb3NhbCBwYWdlICIgKyBwYWdlICsgIiBkaWQgbm90IGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHM6IHdhcyAiICsKLQkJCQkJCXBhZ2VzW3BhZ2VdLmxlbmd0aCArICIgZXhwZWN0ZWQgIiArIGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0pOwotCQkJfQotCQl9Ci0JCQotCQkvL2lmIGVycm9ycyByZXBvcnQgdGhlbQotCQlpZihlcnJvci5sZW5ndGgoKSA+IDApIHsKLQkJCUFzc2VydC5mYWlsKGVycm9yLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgPGNvZGU+ZmlsZTwvY29kZT4gZ2V0IGFuIGVkaXRvciBmb3IgaXQuIElmIGFuIGVkaXRvciBoYXMgYWxyZWFkeQotCSAqIGJlZW4gcmV0cmlldmVkIGZvciB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4gdGhlbiByZXR1cm4gdGhlIHNhbWUgYWxyZWFkeQotCSAqIG9wZW4gZWRpdG9yLjwvcD4KLQkgKiAKLQkgKiA8cD5XaGVuIG9wZW5pbmcgdGhlIGVkaXRvciBpdCB3aWxsIGFsc28gc3RhbmRhcmRpemVkIHRoZSBsaW5lCi0JICogZW5kaW5ncyB0byA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGUgb3BlbiBhbmQgcmV0dXJuIGFuIGVkaXRvciBmb3IgdGhpcwotCSAqIEByZXR1cm4gPGNvZGU+U3RydWN0dXJlZFRleHRFZGl0b3I8L2NvZGU+IG9wZW5lZCBmcm9tIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSAgewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpZkZpbGVUb0VkaXRvck1hcC5nZXQoZmlsZSk7Ci0JCQotCQlpZihlZGl0b3IgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUsIHRydWUpOwotCQkJCWlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQllZGl0b3IgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWVkaXRvclBhcnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhlZGl0b3IpOwotCQkJCQlmRmlsZVRvRWRpdG9yTWFwLnB1dChmaWxlLCBlZGl0b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSArICIgZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQkKLQkvKioKLQkgKiA8cD5MaW5lIGVuZGluZ3MgY2FuIGJlIGFuIGlzc3VlIHdoZW4gcnVubmluZyB0ZXN0cyBvbiBkaWZmZXJlbnQgT1NzLgotCSAqIFRoaXMgZnVuY3Rpb24gc3RhbmRhcmRpemVzIHRoZSBsaW5lIGVuZGluZ3MgdG8gdXNlIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiA8cD5JdCB3aWxsIGdldCB0aGUgdGV4dCBmcm9tIHRoZSBnaXZlbiBlZGl0b3IsIGNoYW5nZSB0aGUgbGluZSBlbmRpbmdzLAotCSAqIGFuZCB0aGVuIHNhdmUgdGhlIGVkaXRvcjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZWRpdG9yIHN0YW5kYXJkaXplIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIHRleHQgcHJlc2VudGVkIGluIHRoaXMKLQkgKiBlZGl0b3IuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKFN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvcikgewotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKS5nZXREb2N1bWVudCgpOwotCQlTdHJpbmcgY29udGVudHMgPSBkb2MuZ2V0KCk7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJZG9jLnNldChjb250ZW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlRoaXMgaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBkbyBzZXQgdXAgYW5kIHRlYXIgZG93biBiZWZvcmUgYW5kCi0JICogYWZ0ZXIgKHJlc3BlY3RpdmVseSkgYWxsIHRlc3RzIGluIHRoZSBpbmNsb3NpbmcgY2xhc3MgaGF2ZSBydW4uPC9wPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL3NldHVwIHByb3BlcnRpZXMKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBub25pbnRlcmFjdGl2ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JCQkKLQkJCS8vc2V0dXAgcHJvamVjdAotCQkJZlByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmV3IFN0cmluZ1tdIHtKQVZBX1NDUklQVF9OQVRVUkVfSUR9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9jbG9zZSBvdXQgdGhlIGVkaXRvcnMKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBmRmlsZVRvRWRpdG9yTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShpdGVyLmhhc05leHQoKSkgewotCQkJCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilpdGVyLm5leHQoKTsKLQkJCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCWVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCS8vcmVtb3ZlIHByb2plY3QKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQkJLy9yZXN0b3JlIHByb3BlcnRpZXMKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTAzYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMiOwotCQotCS8qKiBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcGVuZCBvbiBKU0RUICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfU0NSSVBUX05BVFVSRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmpzTmF0dXJlIjsKLQkKLQkvKiogVGhlIGxvY2F0aW9uIG9mIHRoZSB0ZXN0aW5nIGZpbGVzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfRklMRVMgPSAiL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdCI7Ci0JCi0JLyoqIFRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZSB0ZXN0cyB1c2UgKi8KLQlwcml2YXRlIHN0YXRpYyBJUHJvamVjdCBmUHJvamVjdDsKLQkKLQkvKioKLQkgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFscmVhZHkgb3BlbiBlZGl0b3JzIHNvIHRoYXQgdGhlIHRlc3RzIGRvbid0IGdvIHRocm91Z2gKLQkgKiB0aGUgdHJvdWJsZSBvZiBvcGVuaW5nIHRoZSBzYW1lIGVkaXRvcnMgb3ZlciBhbmQgb3ZlciBhZ2FpbgotCSAqLwotCXByaXZhdGUgc3RhdGljIE1hcCBmRmlsZVRvRWRpdG9yTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkKLQkvKioKLQkgKiA8cD5EZWZhdWx0IGNvbnN0cnVjdG9yPHA+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMoKSB7Ci0JCXN1cGVyKCJUZXN0IEhUTUwgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlVzZSB0aGlzIG1ldGhvZCB0byBhZGQgdGhlc2UgdGVzdHMgdG8gYSBsYXJnZXIgdGVzdCBzdWl0ZSBzbyBzZXQgdXAKLQkgKiBhbmQgdGVhciBkb3duIGNhbiBiZSBwZXJmb3JtZWQ8L3A+Ci0JICogCi0JICogQHJldHVybiBhIHtAbGluayBUZXN0U2V0dXB9IHRoYXQgd2lsbCBydW4gYWxsIG9mIHRoZSB0ZXN0cyBpbiB0aGlzIGNsYXNzCi0JICogd2l0aCBzZXQgdXAgYW5kIHRlYXIgZG93bi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSB0cyA9IG5ldyBUZXN0U3VpdGUoVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmNsYXNzLCAiVGVzdCBIVE1MIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCQlyZXR1cm4gbmV3IFRlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwKHRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RG9jdW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NywgNiwgMSwgN307Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDAuaHRtbCIsIDAsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJEb2NUeXBlQmVmb3JlSFRNTFRhZ1Byb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs4LCA4LCAwLCA4fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5odG1sIiwgMSwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZnRlckRvY1R5cGVCZWZvcmVFbXB0eURvY1Byb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs5LCA4LCAxLCA5fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0Mi5odG1sIiwgMSwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCb2R5VGFnQ2hpbGRFbGVtZW50UHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezc4LCA4LCA3MCwgNzh9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmh0bWwiLCA4LCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFBUYWdDaGlsZEVsZW1lbnRQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NTQsIDgsIDQ2LCA1NH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuaHRtbCIsIDE0LCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERJVlRhZ0NoaWxkRWxlbWVudFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs3OCwgOCwgNzAsIDc4fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5odG1sIiwgMTgsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudFRhZ0NoaWxkRWxlbWVudFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UKLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuaHRtbCIsIDIyLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERJVlRhZ0F0dHJpYnV0ZU5hbWVQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTgsIDAsIDE4LCAxOH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuaHRtbCIsIDE3LCA1LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdUYWdOYW1lUHJvcHNvYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEsIDAsIDEsIDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q0Lmh0bWwiLCA5LCA5LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdUYWdQcm9wc29hbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MiwgMCwgMiwgMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuaHRtbCIsIDEwLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdUYWdOYW1lUHJvcHNvYWxzWEhUTUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MSwgMCwgMSwgMX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDUueGh0bWwiLCA5LCA5LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdUYWdQcm9wc29hbHNYSFRNTCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsyLCAwLCAyLCAyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0NS54aHRtbCIsIDEwLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UnVuIGEgcHJvcG9zYWwgdGVzdCBieSBvcGVuaW5nIHRoZSBnaXZlbiBmaWxlIGFuZCBpbnZva2luZyBjb250ZW50IGFzc2lzdCBmb3IKLQkgKiBlYWNoIGV4cGVjdGVkIHByb3Bvc2FsIGNvdW50IGF0IHRoZSBnaXZlbiBsaW5lIG51bWJlciBhbmQgbGluZSBjaGFyYWN0ZXIKLQkgKiBvZmZzZXQgYW5kIHRoZW4gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHByb3Bvc2FscyBmb3IgZWFjaCBpbnZvY2F0aW9uIChwYWdlcykgdG8gdGhlCi0JICogZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fscy48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGVOYW1lCi0JICogQHBhcmFtIGxpbmVOdW0KLQkgKiBAcGFyYW0gbGluZVJlbGF0aXZlQ2hhck9mZnNldAotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1blByb3Bvc2FsVGVzdChTdHJpbmcgZmlsZU5hbWUsCi0JCQlpbnQgbGluZU51bSwgaW50IGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQsCi0JCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB0aHJvd3MgRXhjZXB0aW9uewotCQkKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlpbnQgb2Zmc2V0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldChsaW5lTnVtKSArIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQ7Ci0KLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBnZXRQcm9wb3NhbHModmlld2VyLCBvZmZzZXQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoKTsKLQkJCi0JCXZlcmlmeVByb3Bvc2FsQ291bnRzKHBhZ2VzLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+SW52b2tlIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBnaXZlbiB2aWV3ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCwgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgcGFnZXMKLQkgKiBhbmQgcmV0dXJuIHRoZSByZXN1bHRzIG9mIGVhY2ggcGFnZTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEBwYXJhbSBwYWdlQ291bnQKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJQ29tcGxldGlvblByb3Bvc2FsW11bXSBnZXRQcm9wb3NhbHMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBpbnQgb2Zmc2V0LCBpbnQgcGFnZUNvdW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9zZXR1cCB0aGUgdmlld2VyCi0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgY29uZmlndXJhdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0JCUNvbnRlbnRBc3Npc3RhbnQgY29udGVudEFzc2lzdGFudCA9IChDb250ZW50QXNzaXN0YW50KWNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEFzc2lzdGFudCh2aWV3ZXIpOwotCQl2aWV3ZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24pOwotCQl2aWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShvZmZzZXQsIDApOwotCQkKLQkJLy9nZXQgdGhlIHByb2Nlc3NvcgotCQlTdHJpbmcgcGFydGl0aW9uVHlwZUlEID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFydGl0aW9uKG9mZnNldCkuZ2V0VHlwZSgpOwotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBjb250ZW50QXNzaXN0YW50LmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3IocGFydGl0aW9uVHlwZUlEKTsKLQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBhYm91dCB0byBzdGFydAotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZCA9IENvbnRlbnRBc3Npc3RhbnQuY2xhc3MuCi0JCSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uQmVnaW5FdmVudCIsIG5ldyBDbGFzc1tdIHtib29sZWFuLmNsYXNzfSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbmV3IE9iamVjdFtdIHtCb29sZWFuLlRSVUV9KTsKLQotCQkvL2dldCBjb250ZW50IGFzc2lzdCBzdWdnZXN0aW9ucwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW3BhZ2VDb3VudF1bXTsKLQkJZm9yKGludCBwID0gMDsgcCA8IHBhZ2VDb3VudDsgKytwKSB7Ci0JCQlwYWdlc1twXSA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCX0KLQkJCi0JCS8vZmlyZSBjb250ZW50IGFzc2lzdCBzZXNzaW9uIGVuZGluZwotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotICAgICAgICBnZXREZWNsYXJlZE1ldGhvZCgiZmlyZVNlc3Npb25FbmRFdmVudCIsIG51bGwpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbnVsbCk7Ci0JCQotCQlyZXR1cm4gcGFnZXM7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbXBhcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMgcGVyIHBhZ2UgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgcHJvcG9zYWxzCi0JICogcGVyIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHBhZ2VzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeVByb3Bvc2FsQ291bnRzKElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzLCBpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB7Ci0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yKGludCBwYWdlID0gMDsgcGFnZSA8IGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoOyArK3BhZ2UpIHsKLQkJCWlmKGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0gPiBwYWdlc1twYWdlXS5sZW5ndGgpIHsKLQkJCQllcnJvci5hcHBlbmQoIlxuUHJvcG9zYWwgcGFnZSAiICsgcGFnZSArICIgaXMgbWlzc2luZyBwcm9wb3NhbHM6IHdhcyAiICsKLQkJCQkJCXBhZ2VzW3BhZ2VdLmxlbmd0aCArICIgZXhwZWN0ZWQgIiArIGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0pOwotCQkJfQotCQl9Ci0JCQotCQkvL2lmIGVycm9ycyByZXBvcnQgdGhlbQotCQlpZihlcnJvci5sZW5ndGgoKSA+IDApIHsKLQkJCUFzc2VydC5mYWlsKGVycm9yLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgPGNvZGU+ZmlsZTwvY29kZT4gZ2V0IGFuIGVkaXRvciBmb3IgaXQuIElmIGFuIGVkaXRvciBoYXMgYWxyZWFkeQotCSAqIGJlZW4gcmV0cmlldmVkIGZvciB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4gdGhlbiByZXR1cm4gdGhlIHNhbWUgYWxyZWFkeQotCSAqIG9wZW4gZWRpdG9yLjwvcD4KLQkgKiAKLQkgKiA8cD5XaGVuIG9wZW5pbmcgdGhlIGVkaXRvciBpdCB3aWxsIGFsc28gc3RhbmRhcmRpemVkIHRoZSBsaW5lCi0JICogZW5kaW5ncyB0byA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGUgb3BlbiBhbmQgcmV0dXJuIGFuIGVkaXRvciBmb3IgdGhpcwotCSAqIEByZXR1cm4gPGNvZGU+U3RydWN0dXJlZFRleHRFZGl0b3I8L2NvZGU+IG9wZW5lZCBmcm9tIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSAgewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpZkZpbGVUb0VkaXRvck1hcC5nZXQoZmlsZSk7Ci0JCQotCQlpZihlZGl0b3IgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUsIHRydWUpOwotCQkJCWlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0JCQkJCVhNTE11bHRpUGFnZUVkaXRvclBhcnQgeG1sRWRpdG9yUGFydCA9IChYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KWVkaXRvclBhcnQ7Ci0JCQkJCWVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcil4bWxFZGl0b3JQYXJ0LmdldEFkYXB0ZXIoU3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpOwotCQkJCX0gZWxzZSBpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIik7Ci0JCQkJfQotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCXN0YW5kYXJkaXplTGluZUVuZGluZ3MoZWRpdG9yKTsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogPHA+TGluZSBlbmRpbmdzIGNhbiBiZSBhbiBpc3N1ZSB3aGVuIHJ1bm5pbmcgdGVzdHMgb24gZGlmZmVyZW50IE9Tcy4KLQkgKiBUaGlzIGZ1bmN0aW9uIHN0YW5kYXJkaXplcyB0aGUgbGluZSBlbmRpbmdzIHRvIHVzZSA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogPHA+SXQgd2lsbCBnZXQgdGhlIHRleHQgZnJvbSB0aGUgZ2l2ZW4gZWRpdG9yLCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywKLQkgKiBhbmQgdGhlbiBzYXZlIHRoZSBlZGl0b3I8L3A+Ci0JICogCi0JICogQHBhcmFtIGVkaXRvciBzdGFuZGFyZGl6ZSB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSB0ZXh0IHByZXNlbnRlZCBpbiB0aGlzCi0JICogZWRpdG9yLgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9zZXR1cCBwcm9wZXJ0aWVzCi0JCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFKTsKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQkJCi0JCQkvL3NldHVwIHByb2plY3QKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXSB7SkFWQV9TQ1JJUFRfTkFUVVJFX0lEfSk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQkvL3JlbW92ZSBwcm9qZWN0Ci0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkKLQkJCS8vcmVzdG9yZSBwcm9wZXJ0aWVzCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVGVzdEhUTUxWYWxpZGF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92YWxpZGF0aW9uL1Rlc3RIVE1MVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NWUxYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVGVzdEhUTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmludGVybmFsLnZhbGlkYXRpb24uSFRNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuV29ya2JlbmNoQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUZXN0IGZvciB0aGUgSFRNTFZhbGlkYXRvcgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5odG1sLmludGVybmFsLnZhbGlkYXRpb24uSFRNTFZhbGlkYXRvcgotICovCi1wdWJsaWMgY2xhc3MgVGVzdEhUTUxWYWxpZGF0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKiogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlc2UgdGVzdHMgd2lsbCB1c2UgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RIVE1MVmFsaWRhdG9yIjsKLQkKLQkvKiogVGhlIGxvY2F0aW9uIG9mIHRoZSB0ZXN0aW5nIGZpbGVzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfRklMRVMgPSAiL3Rlc3RyZXNvdXJjZXMvVGVzdEhUTUxWYWxpZGF0b3IiOwotCQotCS8qKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JcHJpdmF0ZSBIVE1MVmFsaWRhdG9yIGZWYWxpZGF0b3IgPSBuZXcgSFRNTFZhbGlkYXRvcigpOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RIVE1MVmFsaWRhdG9yKCkgewotCQlzdXBlcigiVGVzdCBIVE1MVmFsaWRhdG9yIik7Ci0JfQotCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RIVE1MVmFsaWRhdG9yKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKFRlc3RIVE1MVmFsaWRhdG9yLmNsYXNzLCAiVGVzdCBIVE1MVmFsaWRhdG9yIik7Ci0JCXJldHVybiBuZXcgVGVzdEhUTUxWYWxpZGF0b3JTZXR1cCh0cyk7Ci0JfQotCQotCS8qKgotCSAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgQnVnIDI4NTI4NQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MI3Rlc3RSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZwotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmFsaWRhdGlvbi5UZXN0SFRNTFZhbGlkYXRvciN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmFsaWRhdGlvbi5KU1BIVE1MVmFsaWRhdG9yVGVzdCN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcoKSB0aHJvd3MgRXhjZXB0aW9uewotCQlJRmlsZSB0ZXN0RmlsZSA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCS8vZ2V0IHRlc3QgZmlsZQotCQkJdGVzdEZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKCJSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy5odG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIHRlc3RGaWxlICsgIiBkb2VzIG5vdCBleGlzdCIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQkJCQotCQkJLy9nZXQgdGhlIGRvY3VtZW50Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KHRlc3RGaWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQotCQkJLy9zZXQgdXAgZm9yIGZWYWxpZGF0b3IKLQkJCVdvcmtiZW5jaENvbnRleHQgY29udGV4dCA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCQlMaXN0IGZpbGVMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZmlsZUxpc3QuYWRkKHRlc3RGaWxlLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpKTsKLQkJCWNvbnRleHQuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0KTsKLQkJCQotCQkJLy92YWxpZGF0ZSBjbGVhbiBmaWxlCi0JCQlUZXN0UmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlmVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydEZhbHNlKCJUaGVyZSBzaG91bGQgYmUgbm8gdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCQotCQkJLy9uZWVkIHRvIGR5bmFtaWNhbGx5IGZpbmQgd2hlcmUgdGhlIC0tPiBpcyBiZWNhdXNlCi0JCQkvL2l0cyBkaWZmZXJlbnQgb24gdW5peCB2cyB3aW5kb3dzIGJlY2F1c2Ugb2YgbGluZSBlbmRpbmdzCi0JCQlTdHJpbmcgY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWludCBlbmRDb21tZW50SW5kZXggPSBjb250ZW50cy5pbmRleE9mKCItLT4iKTsKLQkJCQotCQkJLy9yZW1vdmUgLS0+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZENvbW1lbnRJbmRleCwgMywgIiIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGZpbGUgd2l0aCBlcnJvcgotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlmVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSB2YWxpZGF0aW9uIGVycm9ycyBvbiAiICsgdGVzdEZpbGUsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQkKLQkJCS8vcmVwbGFjZSAtLT4KLQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kQ29tbWVudEluZGV4LCAwLCAiLS0+Iik7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlmVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydEZhbHNlKCJUaGVyZSBzaG91bGQgYmUgbm8gdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIEJ1ZyAyOTg0NzIKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZGF0ZVRhZ05hbWVUaGVuRml4KCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSUZpbGUgdGVzdEZpbGUgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCXRlc3RGaWxlID0gZlByb2plY3QuZ2V0RmlsZSgiSW52YWxpZGF0ZVRhZ05hbWVUaGVuRml4Lmh0bWwiKTsKLQkJCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgdGVzdEZpbGUgKyAiIGRvZXMgbm90IGV4aXN0IiwgdGVzdEZpbGUuZXhpc3RzKCkpOwotCQkJCi0JCQkvL2dldCB0aGUgZG9jdW1lbnQKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQodGVzdEZpbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCi0JCQkvL3NldCB1cCBmb3IgdmFsaWRhdG9yCi0JCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQkJTGlzdCBmaWxlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWZpbGVMaXN0LmFkZCh0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQljb250ZXh0LnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdCk7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQkKLQkJCS8vbmVlZCB0byBkeW5hbWljYWxseSBmaW5kIHdoZXJlIHRoZSAtLT4gaXMgYmVjYXVzZQotCQkJLy9pdHMgZGlmZmVyZW50IG9uIHVuaXggdnMgd2luZG93cyBiZWNhdXNlIG9mIGxpbmUgZW5kaW5ncwotCQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlpbnQgZW5kT2ZTdGFydFRhZ0luZGV4ID0gY29udGVudHMuaW5kZXhPZigiPjwvZGl2PiIpOwotCQkJCi0JCQkvL2NoYW5nZSB0byA8ZGl2eD48L2Rpdj4KLQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kT2ZTdGFydFRhZ0luZGV4LCAwLCAieCIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGZpbGUgd2l0aCBlcnJvcgotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlmVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSB2YWxpZGF0aW9uIGVycm9ycyBvbiAiICsgdGVzdEZpbGUsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQkKLQkJCS8vY2hhbmdlIGJhY2sgdG8gPGRpdj48L2Rpdj4KLQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kT2ZTdGFydFRhZ0luZGV4LCAxLCAiIik7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlmVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydEZhbHNlKCJUaGVyZSBzaG91bGQgYmUgbm8gdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0SFRNTFZhbGlkYXRvclNldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBUZXN0SFRNTFZhbGlkYXRvclNldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJCi0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCQkKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBBIDxjb2RlPklSZXBvcnRlcjwvY29kZT4gZm9yIHRlc3RpbmcgdmFsaWRhdG9ycwotCSAqLwotCXByaXZhdGUgY2xhc3MgVGVzdFJlcG9ydGVyIGltcGxlbWVudHMgSVJlcG9ydGVyIHsKLQkJcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VSZXBvcnRlZCA9IGZhbHNlOwotCQkKLQkJcHVibGljIFRlc3RSZXBvcnRlcigpe30KLQkJCi0JCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJCW1lc3NhZ2VSZXBvcnRlZCA9IHRydWU7Ci0JCX0KLQkJCi0JCXB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVJlcG9ydGVkKCkgewotCQkJcmV0dXJuIG1lc3NhZ2VSZXBvcnRlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3BsYXlTdWJ0YXNrKElWYWxpZGF0b3IgdmFsaWRhdG9yLCBJTWVzc2FnZSBtZXNzYWdlKSB7fQotCi0JCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luLCBPYmplY3Qgb2JqZWN0KSB7fQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luKSB7fQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZU1lc3NhZ2VTdWJzZXQoSVZhbGlkYXRvciB2YWxpZGF0b3IsIE9iamVjdCBvYmosIFN0cmluZyBncm91cE5hbWUpIHt9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzNiYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLSAgICBwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCkgewotICAgICAgICBzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCi0JCWlmKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEFubm90YXRpb25Ib3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUFubm90YXRpb25Ib3ZlciBob3ZlciA9IGZDb25maWcuZ2V0QW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJBbm5vdGF0aW9uSG92ZXIgaXMgbnVsbCIsIGhvdmVyKTsKLSAgICB9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoPjApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAxKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVH07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dEhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRUZXh0SG92ZXIoZlZpZXdlciwgaG92ZXJQYXJ0aXRpb25zW2ldLCBTV1QuTk9ORSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJob3ZlciB3YXMgbnVsbCBmb3IgcGFydGl0aW9uOiAiICsgaG92ZXJQYXJ0aXRpb25zW2ldLCBob3Zlcik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RIVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjIxMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdEhUTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZpZXdlcidzIGhpZ2hsaWdodGluZyB0ZXh0IHJhbmdlIHRvIHRoZSB0ZXh0IHJhbmdlIGluZGljYXRlZAotCSAqIGJ5IHRoZSBzZWxlY3RlZCBOb2Rlcy4KLQkgKi8KLQlwcm90ZWN0ZWQgY2xhc3MgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLnRvQXJyYXkoKVtzZWxlY3Rpb24uc2l6ZSgpIC0gMV07Ci0KLQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0JCWludCBsZW5ndGhWYWx1ZTsKLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vCQkJc3RhcnQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLwkJCQkJaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLwkJCQkJCXRyeSB7Ci0JCQkvLwkJCQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vCQkJCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJfQotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQkJCS8vCQkJbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8JCQkJCWlmIChlLndpZGdldCA9PSBsZW5ndGgpIHsKLQkJCS8vCQkJCQkJdHJ5IHsKLQkJCS8vCQkJCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLwkJCQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQl9Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IEhUTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coc291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQkJcmV0dXJuOwotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQkJc291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLwkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vCQkJCX0KLQkJCS8vCi0JCQkvLwkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8JCQkJCXJldHVybiAiU2V0IElucHV0IHRvIE5VTEwiOwotCQkJLy8JCQkJfQotCQkJLy8JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJLy8JCQkJCXN1cGVyLnJ1bigpOwotCQkJLy8JCQkJCXZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhIG5ldyBkb2N1bWVudCAmIGNvbmZpZ3VyZSBpdAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvck5ldygpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcEZvbGxvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmE2YWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkhUTUxVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RIVE1MVmFsaWRhdG9yL0ludmFsaWRhdGVUYWdOYW1lVGhlbkZpeC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9JbnZhbGlkYXRlVGFnTmFtZVRoZW5GaXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhNTZlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RIVE1MVmFsaWRhdG9yL0ludmFsaWRhdGVUYWdOYW1lVGhlbkZpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxkaXY+PC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RIVE1MVmFsaWRhdG9yL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RIVE1MVmFsaWRhdG9yL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzAyMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTwhLS0gIFRlc3QgLS0+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MC5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGI1YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotCi08cD4KLQotPC9wPgotCi08ZGl2ID4KLQotPC9kaXY+Ci0KLTwhLS0gCi0KLSAtLT4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZmI0ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0My5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjYxNWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0My5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotCi08c3R5bGU+Ci08IS0tCi0KLQotCi0uZm9vIHsKLQkKLQlib3JkZXItc3R5bGU6IAotfQotCi0uYmFyIHsKLQlib3JkZXItYm90dG9tCi19Ci0KLS5uZXRvIHsKLQlib3JkZXItYm90dG9tLXN0eWxlOiBkCi19Ci0KLXQgewotCi19Ci0tLT4KLTwvc3R5bGU+Ci0KLTwvaGVhZD4KLTxib2R5IHN0eWxlPSIgIj4KLQotPGRpdiBzdHlsZT0iIj48L2Rpdj4KLQotPGRpdiBzdHlsZT0iYm9yZGVyLXN0eWxlOiAgIj48L2Rpdj4KLQotPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbSAiPjwvZGl2PgotCi08ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tLXN0eWxlOiBkICI+PC9kaXY+Ci0KLTxkaXYgc3R5bGU9ImJvcmRlci1ib3R0b20tc3R5bGU6IGRvdHRlZDsiPjwvZGl2PgotCi08ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tLXN0eWxlOiBkb3R0ZWQ7ICI+PC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmY2ZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGRpdj48L2RpCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDUueGh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDUueGh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZDY4YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q1LnhodG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+DQotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KLTxoZWFkPg0KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+DQotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGRpdj48L2RpDQotDQotPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiYjdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmUwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZTRkNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBEZWMgMDcgMDM6MjM6MjYgRVNUIDIwMDkNCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YWQyMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMudHJhbnNsYXRpb24KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlM2NlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cw0KLUJ1bmRsZS1WZW5kb3IgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQ0KLUJ1bmRsZS1OYW1lID0gSlNEVCBXZWIgQ29yZSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjAyMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+SnVuZSAyLCAyMDA2PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIAotYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgCi1iZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgCi1wcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50Ci1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNGJkY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RGaWxlcy8sXAotICAgICAgICAgICAgICAgT1NHSS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ3YzYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQ09OU09MRSA9IGZhbHNlOwotCQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi9jb3JlL3Rlc3RzL0FsbFdlYkNvcmVUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi9jb3JlL3Rlc3RzL0FsbFdlYkNvcmVUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDRjNmViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BbGxXZWJDb3JlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMudHJhbnNsYXRpb24uVGVzdEh0bWxUcmFuc2xhdGlvbjsKLQotcHVibGljIGNsYXNzIEFsbFdlYkNvcmVUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIEFsbFdlYkNvcmVUZXN0cygpIHsKLQkJc3VwZXIoIkpTRFQgV2ViIENvcmUgVGVzdHMiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIkpTRFQgV2ViIENvcmUgVGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0KLQkJLy8kSlVuaXQtRU5EJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdEh0bWxUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vVGVzdEh0bWxUcmFuc2xhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGE1YzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSnNUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUuamF2YXNjcmlwdC5Kc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMuQWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdEh0bWxUcmFuc2xhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZk1vZGVsTWFuYWdlciA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RGaWxlc0RpcmVjdG9yeSA9ICJ0ZXN0RmlsZXMiOwotCXB1YmxpYyBUZXN0SHRtbFRyYW5zbGF0aW9uKCl7Ci0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEZvcm1hdCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRlc3QxLmh0bWwiKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAidGVzdDEuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCQotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIG1pc3NpbmciLCB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKS5pbmRleE9mKCJmdW5jdGlvbiBibGFoKCkiKSA+PSAwKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsJCQotCQlTdHJpbmcgaW5wdXRTdHJpbmcgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShmaWxlTmFtZSk7Ci0JCQlmaWxlSW5wdXRTdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCi0JCQlieXRlW10gaW5wdXRCdWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJCWlucHV0U3RyaW5nID0gbmV3IFN0cmluZygpOwotCQkJaW50IGJ5dGVzUmVhZCA9IC0xOwotCi0JCQl3aGlsZSAodHJ1ZSkgewotCQkJCWJ5dGVzUmVhZCA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKGlucHV0QnVmZmVyKTsKLQkJCQlpZiAoYnl0ZXNSZWFkID09IC0xKQotCQkJCQlicmVhazsKLQkJCQlTdHJpbmcgYnVmZmVyU3RyaW5nID0gbmV3IFN0cmluZyhpbnB1dEJ1ZmZlcik7Ci0JCQkJYnVmZmVyU3RyaW5nID0gYnVmZmVyU3RyaW5nLnN1YnN0cmluZygwLCBieXRlc1JlYWQpOwotCQkJCWlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcuY29uY2F0KGJ1ZmZlclN0cmluZyk7Ci0JCQl9Ci0KLQkJCWlmIChmaWxlSW5wdXRTdHJlYW0gIT0gbnVsbCkKLQkJCQlmaWxlSW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCi0JCXJldHVybiBpbnB1dFN0cmluZzsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCVN0cmluZyBpbnB1dCA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXQuZ2V0Qnl0ZXMoIlVURjgiKSk7Ci0JCQlTdHJpbmcgaWQgPSBpbnB1dFN0cmVhbS50b1N0cmluZygpLmNvbmNhdChmaWxlTmFtZSk7Ci0JCQkKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IGZNb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGlkLCBpbnB1dFN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJCS8vIHNob3VsZCBhbHJlYWR5IGJlIGNsb3NlZAotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cnVjdHVyZWRNb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U2hhcmVkTW9kZWwoU3RyaW5nIGlkLCBTdHJpbmcgY29udGVudHMpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCJVVEY4IikpOwotCQkJCi0JCQlzdHJ1Y3R1cmVkTW9kZWwgPSBmTW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChpZCwgaW5wdXRTdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkvLyBzaG91bGQgYWxyZWFkeSBiZSBjbG9zZWQKLQkJCX0KLQkJfQotCi0JCXJldHVybiBzdHJ1Y3R1cmVkTW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJcmV0dXJuIHJlYWRGaWxlKCIvdGVzdEZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVUYWdJbkpTKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciBhID0gPGN1c3RvbTp0YWcvPjU7IGlmKGEgPCA0KSB7fSA7IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8Y3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIGEgPSA8Y3VzdG9tOnRhZy8+NTtcbmlmKGEgPCA8JT0gNCAlPikge30gOyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiY3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJpZiBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI1O1xuaWYoYSA8IikgPiAtMSk7Ci0JCWFzc2VydFRydWUoImJsb2NrIGRyb3BwZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIikge30gOyAiKSA+IC0xKTsgCi0KLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlVGFnQW5kU2VydmVyU2lkZUluSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIGEgPSA8JT0gNCAlPjU7XG5pZihhIDwgPGN1c3RvbTp0YWcvPikge30gOyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiY3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJpZiBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI1O1xuaWYoYSA8ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJibG9jayBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIpIHt9IDsgIikgPiAtMSk7IAotCi0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0vLwlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlT3ZlcmxhcHBpbmdUYWdBbmRTZXJ2ZXJTaWRlSW5KUygpIHsJCQotLy8JCS8vIGdldCBtb2RlbAotLy8JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0vLwkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciBhID0gPCU9IDQgJT41O1xuaWYoYSA8IDxjdXN0b206dGFnIGF0dHI9XCI8JT0lPlwiLz4pIHt9IDsgPC9zY3JpcHQ+Iik7Ci0vLwkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLS8vCQkKLS8vCQkvLyBkbyB0cmFuc2xhdGlvbgotLy8JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0vLwkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotLy8JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotLy8JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJjdXN0b20iKSA8IDApOwotLy8JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiLz4iKSA8IDApOwotLy8JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotLy8JCWFzc2VydFRydWUoImlmIGRyb3BwZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjU7XG5pZihhIDwgIikgPiAtMSk7Ci0vLwkJYXNzZXJ0VHJ1ZSgiYmxvY2sgZHJvcHBlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiKSB7fSA7ICIpID4gLTEpOyAKLS8vCi0vLwkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotLy8KLS8vCQkvLyByZWxlYXNlIG1vZGVsCi0vLwkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotLy8JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVTZXJ2ZXJTaWRlMUluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+OyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVTZXJ2ZXJTaWRlMkluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgPC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJ2YXIgZHJvcHBlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigidmFyIHRleHQgPSAiKSA+IC0xKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlTXVsdGlwbGVTZXJ2ZXJTaWRlMUluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+OyAgPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+PC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiJT4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJ2YXIgZHJvcHBlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigidmFyIHRleHQgPSAiKSA+IC0xKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlTXVsdGlwbGVTZXJ2ZXJTaWRlMkluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgIDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUluSlNfYW5kX0NoZWNrUHJvYmxlbXMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjwlPVwiY1wiJT4gPC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRFcXVhbHMoInRyYW5zbGF0ZWQgY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiwgIiAgICAgICAgIHZhciB0ZXh0ID0gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fXzsgXyR0YWdfX18gXyR0YWdfX18gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fX18kdGFnX19fICIsdHJhbnNsYXRlZCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPCUiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIiU+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidmFyIGRyb3BwZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoInZhciB0ZXh0ID0gIikgPiAtMSk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdE1hbmdsZU11bHRpcGxlTWl4ZWRTZXJ2ZXJTaWRlSW5KU3dpdGhYTUxjb21tZW50X2FuZF9DaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IDwhLS0gXG52YXIgdGV4dCA9IDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz47IDwlPVwiYVwiJT4gPCU9XCJiXCIlPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgICAgICBcbnZhciB0ZXh0ID0gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fXzsgXyR0YWdfX18gXyR0YWdfX18gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fX18kdGFnX19fICIsdHJhbnNsYXRlZCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPCUiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIiU+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidmFyIGRyb3BwZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoInZhciB0ZXh0ID0gIikgPiAtMSk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE1hbmdsZU11bHRpcGxlTWl4ZWRTZXJ2ZXJTaWRlSW5KU3dpdGhYTUxjb21tZW50T25TYW1lTGluZSgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PiA8IS0tIHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgPCU9XCJhXCIlPiA8JT1cImJcIiU+IDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz48JT1cImNcIiU+IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGVkIGNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIsCi0JCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix0cmFuc2xhdGVkKTsKLQkJYXNzZXJ0VHJ1ZSgidHJhbnNsYXRpb24gZW1wdHkiLCB0cmFuc2xhdGVkLmxlbmd0aCgpID4gNSk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPD8iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIj8+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiJT4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlNfYW5kX0NoZWNrUHJvYmxlbXMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPHNlcnZlcjp0YWcvPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgdmFyIHRleHQgPSBfJHRhZ19fX19fX19fX19fX19fX19fX19fX19fOyBfJHRhZ19fXyBfJHRhZ19fXyBfJHRhZ19fX19fX19fIF8kdGFnX19fX19fX19fX19fX19fX19fX19fX19fJHRhZ19fXyAiLHRyYW5zbGF0ZWQpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlNfYW5kX0NoZWNrUHJvYmxlbXMyKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5qc3AiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPHNlcnZlcjp0YWcvPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgdmFyIHRleHQgPSBfJHRhZ19fX19fX19fX19fX19fX19fX19fX19fOyBfJHRhZ19fXyBfJHRhZ19fXyBfJHRhZ19fX19fX19fIF8kdGFnX19fX19fX19fX19fX19fX19fX19fX19fJHRhZ19fXyAiLHRyYW5zbGF0ZWQpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RKdXN0Q2xpZW50VGFnSW5KUygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PjxjdXN0b206dGFnIC8+PC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI8IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBub3QgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmxlbmd0aCgpICE9IDApOyAKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEp1c3RTZXJ2ZXIxU2lkZUluSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD48JT0gJT48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgbm90IGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5sZW5ndGgoKSAhPSAwKTsgCi0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RKdXN0U2VydmVyMlNpZGVJbkpTKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+PD8gISEhISEhISEhISEhISEgPz48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgbm90IGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5sZW5ndGgoKSAhPSAwKTsgCi0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RMZWFkaW5nWE1MQ29tbWVudCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICIgPHNjcmlwdD4gPCEtLSAgPC9zY3JpcHQ+ICIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCIgICAgICAgICAgICAgICAgIiwgdHJhbnNsYXRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RYTUxDb21tZW50KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IGlmKGEpIDwhLS0gLS0+IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCIgICAgICAgICBpZihhKSA8IS0tIC0tPiAiLCB0cmFuc2xhdGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdENEQVRBSW5KUygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PiB2YXIgdGV4dCA9IDwhW0NEQVRBWyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpIF1dPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJDREFUQSBzdGFydCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiQ0RBVEEiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJDREFUQSBzdGFydCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiWyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoIkNEQVRBIGVuZCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiXSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDM0Njg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotDQotPHByb2plY3QNCi0gICAgbmFtZT0idGVzdHN1aXRlIg0KLSAgICBkZWZhdWx0PSJydW4iDQotICAgIGJhc2VkaXI9Ii4iPg0KLSAgICANCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPg0KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPg0KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4NCi0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4NCi0NCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiDQotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIg0KLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLkFsbFdlYkNvcmVUZXN0cyIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSINCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+DQotDQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+DQotDQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPg0KLQ0KLQ0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSINCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9IndvcmtzcGFjZSINCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4NCi0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4NCi0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+DQotICAgICAgICA8dHN0YW1wIC8+DQotICAgICAgICA8ZGVsZXRlPg0KLSAgICAgICAgICAgIDxmaWxlc2V0DQotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ig0KLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4NCi0gICAgICAgIDwvZGVsZXRlPg0KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPg0KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPg0KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4NCi0gICAgICAgIDxkZWxldGUNCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSINCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4NCi0NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPg0KLQ0KLSAgICAgICAgPGFudA0KLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iDQotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9Ig0KLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgIDwvYW50Pg0KLQ0KLSAgICAgICAgPGNvcHkNCi0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiDQotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIg0KLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4NCi0NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPg0KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+DQotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4NCi0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPg0KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+DQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+DQotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4NCi0gICAgPHRhcmdldA0KLSAgICAgICAgbmFtZT0icnVuIg0KLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4NCi0gICAgICAgIDxhbnQNCi0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiDQotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9Ig0KLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4NCi0gICAgICAgIDwvYW50Pg0KLSAgICA8L3RhcmdldD4NCi0NCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvdGVzdEZpbGVzL3Rlc3QxLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0RmlsZXMvdGVzdDEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1M2M3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0RmlsZXMvdGVzdDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+Ci08c2NyaXB0PgotZnVuY3Rpb24gYmxhaCgpewotCi0KLQotfQotPC9zY3JpcHQ+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiYjdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNmMzZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2U0ZDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIERlYyAwNyAwMzoyMzoyNiBFU1QgMjAwOQ0KLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40DQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFkMmJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLkFjdGl2YXRvcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLAotIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS5qZmFjZSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnN0eWxlLAotIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy50cmFuc2xhdGlvbgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyZTk0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzCi1CdW5kbGUtTmFtZSA9IEpTRFQgV2ViIFVJIFRlc3RzCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjAyMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiLz4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkp1bmUgMiwgMjAwNjwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIAotaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSAKLWF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIAotYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIAotcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2E+LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZjQ3YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBPU0dJLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0ZXN0RmlsZXMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZjhiYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotX1VJX1NIT1dfVFJBTlNMQVRJT049U2hvdyBUcmFuc2xhdGlvbg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzU5YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjMiPz4NCi08cGx1Z2luPg0KLSAgICA8ZXh0ZW5zaW9uDQotICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+DQotCSAgICA8Y29tbWFuZA0KLQkgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5zaG93VHJhbnNsYXRpb24iDQotCSAgICAgICAgICBuYW1lPSJTaG93IEphdmFTY3JpcHQgVHJhbnNsYXRpb24iPg0KLQkgICAgPC9jb21tYW5kPg0KLQkgICAgPGNvbW1hbmQNCi0JICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIucnVuQ29kZSINCi0JICAgICAgICAgIG5hbWU9IlJ1biBFeGFtcGxlIEhhbmRsZXIiPg0KLQkgICAgPC9jb21tYW5kPg0KLQk8L2V4dGVuc2lvbj4NCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYmluZGluZ3MiPg0KLSAgICAgIDwhLS0gIHdpbjMyOiAgTTE9Q1RSTCwgICAgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9LQ0KLSAgICAgICAgICAgIGNhcmJvbjogTTE9Q09NTUFORCwgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9Q1RSTA0KLSAgICAgICAgICAgIGd0azogPyANCi0gICAgICAtLT4NCi0JCTxrZXkNCi0JCQlzZXF1ZW5jZT0iTTErTTIrOCINCi0JCQljb250ZXh0SWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3RydWN0dXJlZFRleHRFZGl0b3JTY29wZSINCi0JCQljb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5zaG93VHJhbnNsYXRpb24iDQotCQkJc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iLz4NCi0JCTxrZXkNCi0JCQlzZXF1ZW5jZT0iTTErTTIrNyINCi0JCQljb250ZXh0SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmphdmFFZGl0b3JTY29wZSINCi0JCQljb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5ydW5Db2RlIg0KLQkJCXNjaGVtZUlkPSJvcmcuZWNsaXBzZS51aS5kZWZhdWx0QWNjZWxlcmF0b3JDb25maWd1cmF0aW9uIi8+DQotCTwvZXh0ZW5zaW9uPg0KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+DQotICAgICAgIDxoYW5kbGVyDQotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMudHJhbnNsYXRpb24uU2hvd1RyYW5zbGF0aW9uSGFuZGxlciINCi0gICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuc2hvd1RyYW5zbGF0aW9uIi8+DQotICAgICAgIDxoYW5kbGVyDQotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMudHJhbnNsYXRpb24uUnVuQ29kZUhhbmRsZXIiDQotICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnJ1bkNvZGUiLz4NCi0JPC9leHRlbnNpb24+DQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmJpbmRpbmdzIj4NCi0gICAgICA8IS0tICB3aW4zMjogIE0xPUNUUkwsICAgIE0yPVNISUZULCBNMz1BTFQsIE00PS0NCi0gICAgICAgICAgICBjYXJib246IE0xPUNPTU1BTkQsIE0yPVNISUZULCBNMz1BTFQsIE00PUNUUkwNCi0gICAgICAgICAgICBndGs6ID8gDQotICAgICAgLS0+DQotCQk8a2V5DQotCQkJc2VxdWVuY2U9Ik0xK00yKzgiDQotCQkJY29udGV4dElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC51aS5qYXZhc2NyaXB0Vmlld1Njb3BlIg0KLQkJCWNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmV4ZWN1dGVBcmJpdHJhcnlTbmlwcGV0Ig0KLQkJCXNjaGVtZUlkPSJvcmcuZWNsaXBzZS51aS5kZWZhdWx0QWNjZWxlcmF0b3JDb25maWd1cmF0aW9uIi8+DQotCTwvZXh0ZW5zaW9uPg0KLSAgICA8ZXh0ZW5zaW9uDQotICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+DQotCSAgICA8Y29tbWFuZA0KLQkgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5leGVjdXRlQXJiaXRyYXJ5U25pcHBldCINCi0JICAgICAgICAgIG5hbWU9IiVfVUlfUlVOIi8+DQotCTwvZXh0ZW5zaW9uPg0KLTwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNzRmMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWxsV2ViVUlUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWxsV2ViVUlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzkyMmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL0FsbFdlYlVJVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHM7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuZm9ybWF0LkZvcm1hdHRpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuc3R5bGUuU3R5bGVUZXN0czsKLQotcHVibGljIGNsYXNzIEFsbFdlYlVJVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBBbGxXZWJVSVRlc3RzKCkgewotCQlzdXBlcigiSlNEVCBXZWIgVUkgVGVzdHMiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIkpTRFQgV2ViIFVJIFRlc3RzIik7Ci0JCS8vICRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0eWxlVGVzdHMuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0KEZvcm1hdHRpbmdUZXN0cy5zdWl0ZSgpKTsKLQkJLy8gJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvZm9ybWF0L0Zvcm1hdHRpbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvZm9ybWF0L0Zvcm1hdHRpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2QxMTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2Zvcm1hdC9Gb3JtYXR0aW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5Gb3JtYXR0aW5nQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5Gb3JtYXR0aW5nQ29udGV4dFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXJFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUZvcm1hdHRpbmdDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5KYXZhU2NyaXB0Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuaW50ZXJuYWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLmludGVybmFsLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJGb3JtYXR0aW5nVGVzdHMiOwotCQotCS8qKgotCSAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcwotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0RmlsZXMvZm9ybWF0dGluZyI7Ci0JCi0JLyoqCi0JICogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZQotCSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIEZvcm1hdHRpbmdUZXN0cygpIHsKLQkJc3VwZXIoIkZvcm1hdHRpbmcgVGVzdHMiKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIEZvcm1hdHRpbmdUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShGb3JtYXR0aW5nVGVzdHMuY2xhc3MsICJGb3JtYXR0aW5nIFRlc3RzIik7Ci0JCXJldHVybiBuZXcgRm9ybWF0dGluZ1Rlc3RzU2V0dXAodHMpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdEV2ZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MC5odG1sIiwgInRlc3QwLmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0vLwlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SlNQU2NyaXB0RXZlbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotLy8JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDEuanNwIiwgInRlc3QxLmpzcCIsIG5ldyBKU0RUU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCkpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XcmFwcGVkV2l0aEhUTUxDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0Mi5odG1sIiwgInRlc3QyLWZtdC5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0UmVnaW9uV3JhcHBlZFdpdGhIVE1MQ29tbWVudFdpdGhJbnZhbGlkSlMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QzLmh0bWwiLCAidGVzdDMuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbldpdGhKdXN0RW5kSFRNTENvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3Q0Lmh0bWwiLCAidGVzdDQtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XaXRoSnVzdFN0YXJ0SFRNTENvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3Q1Lmh0bWwiLCAidGVzdDUtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRfV2l0aEhUTUxUYWdJblN0cmluZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDYuaHRtbCIsICJ0ZXN0Ni1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0X0Zvcm1hdHRpbmdIVE1MQmVmb3JlU2NyaXB0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0Ny5odG1sIiwgInRlc3Q3LWZtdC5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0X1dpdGhIVE1MVGFnSW5TdHJpbmdfV2l0aEhUTUxDb21tZW50U3RhcnRBbmRFbmRfc2ltcGxlKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0OC5odG1sIiwgInRlc3Q4LWZtdC5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0X1dpdGhIVE1MVGFnSW5TdHJpbmdfV2l0aEhUTUxDb21tZW50U3RhcnRBbmRFbmRfYWR2YW5kZWQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3Q5Lmh0bWwiLCAidGVzdDktZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XcmFwcGVkV2l0aEhUTUxDb21tZW50X1RleHRJbkxlYWRpbmdDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MTAuaHRtbCIsICJ0ZXN0MTAtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XcmFwcGVkV2l0aEhUTUxDb21tZW50X1RleHRJblRyYWlsaW5nQ29tbWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDExLmh0bWwiLCAidGVzdDExLWZtdC5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0UmVnaW9uV3JhcHBlZFdpdGhIVE1MQ29tbWVudF9UZXh0SW5MZWFkaW5nQ29tbWVudF9hbmRfVGV4dEluVHJhaWxpbmdDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MTIuaHRtbCIsICJ0ZXN0MTItZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25fQWxsT25PbmVMaW5lKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MTMuaHRtbCIsICJ0ZXN0MTMtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25fQWxsT25PbmVMaW5lX0xlYWRpbmdDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MTQuaHRtbCIsICJ0ZXN0MTQtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGJlZm9yZVBhdGgKLQkgKiBAcGFyYW0gYWZ0ZXJQYXRoCi0JICogQHBhcmFtIGNvbmZpZ3VyYXRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwjZm9ybWF0QW5kQXNzZXJ0RXF1YWxzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvcm1hdEFuZEFzc2VydEVxdWFscyhTdHJpbmcgYmVmb3JlUGF0aCwgU3RyaW5nIGFmdGVyUGF0aCwgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0JCQliZWZvcmVNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KG5ldyBKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKSk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQkvL25vcm1hbGl6ZSBjb250ZW50cwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIG5vcm1hbGl6ZWRDb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJbm9ybWFsaXplZENvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShub3JtYWxpemVkQ29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCQlub3JtYWxpemVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKG5vcm1hbGl6ZWRDb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCQlkb2N1bWVudC5zZXQobm9ybWFsaXplZENvbnRlbnRzKTsKLQkJCQotCQkJSVNvdXJjZVZpZXdlciB2aWV3ZXIgPSBnZXRDb25maWd1cmVkVmlld2VyKGRvY3VtZW50LCBjb25maWd1cmF0aW9uKTsKLQkJCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBnZXQgdmlld2VyIHRvIHJ1biB0ZXN0Iiwgdmlld2VyKTsKLQkJCQotCQkJLy9kbyB0aGUgZm9ybWF0Ci0JCQlJQ29udGVudEZvcm1hdHRlckV4dGVuc2lvbiBmb3JtYXR0ZXIgPSAoSUNvbnRlbnRGb3JtYXR0ZXJFeHRlbnNpb24pIGNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEZvcm1hdHRlcih2aWV3ZXIpOwotCQkJSUZvcm1hdHRpbmdDb250ZXh0IGZDb250ZXh0ID0gbmV3IEZvcm1hdHRpbmdDb250ZXh0KCk7Ci0JCQlSZWdpb24gcmVnaW9uID0gbmV3IFJlZ2lvbigwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQlmQ29udGV4dC5zZXRQcm9wZXJ0eShGb3JtYXR0aW5nQ29udGV4dFByb3BlcnRpZXMuQ09OVEVYVF9ET0NVTUVOVCwgQm9vbGVhbi52YWx1ZU9mKHRydWUpKTsKLQkJCWZDb250ZXh0LnNldFByb3BlcnR5KEZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllcy5DT05URVhUX1JFR0lPTiwgcmVnaW9uKTsKLQkJCWZvcm1hdHRlci5mb3JtYXQoZG9jdW1lbnQsIGZDb250ZXh0KTsKLQkJCQotCQkJLy9nZXQgdGhlIGNvbnRlbnRzCi0JCQlTdHJpbmcgYWN0dWFsQ29udGVudHMgPSBiZWZvcmVNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gYWZ0ZXJNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQotCQkJLyogTWFrZSBzb21lIGFkanVzdG1lbnRzIHRvIGlnbm9yZSBjcm9zcyBwbGF0Zm9ybSBsaW5lIGRlbGltaXRlciBpc3N1ZXMgKi8KLQkJCWV4cGVjdGVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkQ29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCQlleHBlY3RlZENvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCWFjdHVhbENvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShhY3R1YWxDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCWFjdHVhbENvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShhY3R1YWxDb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCQkKLQkJCWFzc2VydFRydWUoIkZvcm1hdHRlZCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkLlxuRXhwZWN0ZWQgQ29udGVudHM6XG4iCi0JCQkJCSsgZXhwZWN0ZWRDb250ZW50cyArICJcbkFjdHVhbCBDb250ZW50czpcbiIgKyBhY3R1YWxDb250ZW50cywKLQkJCQkJU3RyaW5nVXRpbHMuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihleHBlY3RlZENvbnRlbnRzLCBhY3R1YWxDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vaWdub3JlCi0JCQkJfQotCQkJfQotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQkJCQkvL2lnbm9yZQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RGb3JtYXRQcm9jZXNzb3JDU1MpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgcGF0aCkgewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZShwYXRoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCWNlLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpbykgewotCQkJaW8ucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gZG9jdW1lbnQge0BsaW5rIElEb2N1bWVudH0gdG8gZGlzcGxheSBpbiB0aGUgZHVtbXkgdmlld2VyCi0JICogQHBhcmFtIGNvbmZpZ3VyYXRpb24ge0BsaW5rIFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb259IHRvIGNvbmZpZ3VyZSB0aGUgZHVtbXkgdmlld2VyIHdpdGgKLQkgKiBAcmV0dXJuIGEgY29uZmlndXJlZCB7QGxpbmsgSVNvdXJjZVZpZXdlcn0gdXNpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcnMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJU291cmNlVmlld2VyIGdldENvbmZpZ3VyZWRWaWV3ZXIoSURvY3VtZW50IGRvY3VtZW50LCBTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJSVNvdXJjZVZpZXdlciB2aWV3ZXIgPSBudWxsOwotCQlhc3NlcnROb3ROdWxsKCJDb3VsZCBub3QgZ2V0IGN1cnJlbnQgZGlzcGxheSB0byBydW4gdGVzdCB3aXRoLiIsIERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQotCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0KLQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQl9Ci0JCWVsc2UgewotCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQl9Ci0JCUNvbXBvc2l0ZSBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCXZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCXZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCXZpZXdlci5jb25maWd1cmUoY29uZmlndXJhdGlvbik7Ci0JCQotCQlyZXR1cm4gdmlld2VyOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdHNTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgRm9ybWF0dGluZ1Rlc3RzU2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9pbml0IHRlc3RpbmcgcmVzb3VyY2VzCi0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW10ge0phdmFTY3JpcHRDb3JlLk5BVFVSRV9JRH0pOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCQkKLQkJCS8vc2V0IG5vbi1pbnRlcmFjdGl2ZQotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vZGVsZXRlIHRlc3QgcHJvamVjdHMKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQkJLy9yZXNldCBub24taW50ZXJhY3RpdmUKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9pbnRlcm5hbC9Qcm9qZWN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvaW50ZXJuYWwvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzZTUzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9pbnRlcm5hbC9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy5BY3RpdmF0b3I7Ci0KLS8qKgotICogU29tZSB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHByb2plY3RzLCBhbmQgY29weWluZyBmaWxlcyBpbnRvIHRoZSB3b3Jrc3BhY2UuCi0gKiBDb3BpZWQgZnJvbSBKU1AgVUkgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VXRpbCB7Ci0KLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcm9vdEVudHJ5IC0gYXZvaWQgdHJhaWxpbmcgc2VwYXJhdG9ycwotCSAqIEBwYXJhbSBmdWxsVGFyZ2V0UGF0aAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW50cnluYW1lCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIFRFU1QgcGx1Z2luIHN0YXJ0aW5nIHcvIGEgIi8iIChlZy4KLQkgKiAgICAgICAgICAgICIvdGVzdGZpbGVzL2J1Z251bWJlci9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcGFyYW0gZnVsbFBhdGgKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8ganVuaXQgdGVzdCB3b3JrcGFjZSAoZWcuCi0JICogICAgICAgICAgICAiL215cnVudGltZXByb2ovc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGVbMF07Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2ludGVybmFsL1N0cmluZ1V0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9pbnRlcm5hbC9TdHJpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzE1MDMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2ludGVybmFsL1N0cmluZ1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLS8qKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbAotICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHMKLSAqLwotcHVibGljIGNsYXNzIFN0cmluZ1V0aWxzIHsKLQotCS8qKgotCSAqIFJlcGxhY2UgbWF0Y2hpbmcgbGl0ZXJhbCBwb3J0aW9ucyBvZiBhIHN0cmluZyB3aXRoIGFub3RoZXIgc3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcmVwbGFjZShTdHJpbmcgYVN0cmluZywgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCkgewotCQlpZiAoYVN0cmluZyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCVN0cmluZyBub3JtYWxTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpbnQgbGVuZ3RoID0gYVN0cmluZy5sZW5ndGgoKTsKLQkJaW50IHBvc2l0aW9uID0gMDsKLQkJaW50IHByZXZpb3VzID0gMDsKLQkJaW50IHNwYWNlciA9IHNvdXJjZS5sZW5ndGgoKTsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihub3JtYWxTdHJpbmcpOwotCQl3aGlsZSAocG9zaXRpb24gKyBzcGFjZXIgLSAxIDwgbGVuZ3RoICYmIGFTdHJpbmcuaW5kZXhPZihzb3VyY2UsIHBvc2l0aW9uKSA+IC0xKSB7Ci0JCQlwb3NpdGlvbiA9IGFTdHJpbmcuaW5kZXhPZihzb3VyY2UsIHByZXZpb3VzKTsKLQkJCXNiLmFwcGVuZChub3JtYWxTdHJpbmcpOwotCQkJc2IuYXBwZW5kKGFTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzLCBwb3NpdGlvbikpOwotCQkJc2IuYXBwZW5kKHRhcmdldCk7Ci0JCQlwb3NpdGlvbiArPSBzcGFjZXI7Ci0JCQlwcmV2aW91cyA9IHBvc2l0aW9uOwotCQl9Ci0JCXNiLmFwcGVuZChhU3RyaW5nLnN1YnN0cmluZyhwb3NpdGlvbiwgYVN0cmluZy5sZW5ndGgoKSkpOwotCQlub3JtYWxTdHJpbmcgPSBzYi50b1N0cmluZygpOwotCi0JCXJldHVybiBub3JtYWxTdHJpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRU9MKGludCBhQ2hhcikgewotCQlyZXR1cm4gKGFDaGFyID09ICdcbicgfHwgYUNoYXIgPT0gJ1xyJyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9zdHlsZS9TdHlsZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9zdHlsZS9TdHlsZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGYzZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvc3R5bGUvU3R5bGVUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnN0eWxlOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlUmFuZ2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUphdmFTY3JpcHRQcm9qZWN0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLkphdmFTY3JpcHRDb3JlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLkxpYnJhcnlTdXBlclR5cGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLmNvcmUuSmF2YVByb2plY3Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmxhdW5jaGluZy5KYXZhUnVudGltZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUuaW50ZXJuYWwucHJvamVjdC5Kc1dlYk5hdHVyZTsNCi0NCi0vKioNCi0gKiBAYXV0aG9yIG5pdGluDQotICogDQotICovDQotcHVibGljIGNsYXNzIFN0eWxlVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBTdHlsZVRlc3RzKCkgew0KLQkJc3VwZXIoKTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQHBhcmFtIG5hbWUNCi0JICovDQotCXB1YmxpYyBTdHlsZVRlc3RzKFN0cmluZyBuYW1lKSB7DQotCQlzdXBlcihuYW1lKTsNCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCB0ZXN0S2V5d29yZFN0eWxlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gew0KLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0TmFtZSgpOw0KLQkJU3RyaW5nIGZpbGVOYW1lID0gcHJvamVjdE5hbWUgKyAiLmh0bWwiOw0KLQkJU3RyaW5nIGNvbnRlbnRzID0gIjxodG1sPjxoZWFkPjxzY3JpcHQ+IHZhciBwYXJhbXMgPSBcInNvbWVCYWRTdHJpbmdcIi5zdWJzdHJpbmcoMSwyLDMsNCk7XG5wYXJhaG5hcy5zaGlmdCgpOzwvc2NyaXB0PjwvaGVhZD48Ym9keT4gPC9ib2R5PjwvaHRtbD4iOw0KLQ0KLQkJLy8gQ3JlYXRlIHRoZSBKYXZhU2NyaXB0IHByb2plY3QNCi0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3ROYW1lKTsNCi0JCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuZXcgU3RyaW5nW117SmF2YVNjcmlwdENvcmUuTkFUVVJFX0lEfSk7DQotCQlJUHJvamVjdCBpUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7DQotCQlpUHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJaVByb2plY3Qub3BlbihudWxsKTsNCi0NCi0JCS8vIFNldHVwIHRoZSBKYXZhU2NyaXB0IHByb2plY3Qgd2l0aCBXZWIgc3VwcG9ydA0KLQkJSUphdmFTY3JpcHRQcm9qZWN0IHByb2plY3QgPSBKYXZhU2NyaXB0Q29yZS5jcmVhdGUoaVByb2plY3QpOw0KLQkJcHJvamVjdC5zZXRSYXdJbmNsdWRlcGF0aChudWxsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCUxpYnJhcnlTdXBlclR5cGUgc3VwZXJUeXBlID0gbmV3IExpYnJhcnlTdXBlclR5cGUobmV3IFBhdGgoSmF2YVJ1bnRpbWUuREVGQVVMVF9TVVBFUl9UWVBFX0xJQlJBUlkpLCBwcm9qZWN0LCBKYXZhUnVudGltZS5ERUZBVUxUX1NVUEVSX1RZUEUpOw0KLQkJKChKYXZhUHJvamVjdCkgcHJvamVjdCkuc2V0Q29tbW9uU3VwZXJUeXBlKHN1cGVyVHlwZSk7DQotCQluZXcgSnNXZWJOYXR1cmUoaVByb2plY3QsIG51bGwpLmNvbmZpZ3VyZSgpOw0KLQ0KLQkJLy8gY3JlYXRlIHRlc3QgZmlsZQ0KLQkJSUZpbGUgZmlsZSA9IGlQcm9qZWN0LmdldEZpbGUoZmlsZU5hbWUpOw0KLQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCkpLCB0cnVlLCBudWxsKTsNCi0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLCBmaWxlKTsNCi0JCWFzc2VydE5vdE51bGwoImVkaXRvciBmYWlsZWQgdG8gb3BlbiIsIGVkaXRvcik7DQotCQlDb250cm9sIGNvbnRyb2wgPSAoQ29udHJvbCkgZWRpdG9yLmdldEFkYXB0ZXIoQ29udHJvbC5jbGFzcyk7DQotCQlhc3NlcnROb3ROdWxsKCJlZGl0b3IgZGlkIG5vdCByZXR1cm4gYSBDb250cm9sIGFkYXB0ZXIiLCBjb250cm9sKTsNCi0JCWFzc2VydFRydWUoImVkaXRvciBDb250cm9sIGFkYXB0ZXIgaXMgbm90IGEgU3R5bGVkVGV4dCB3aWRnZXQiLCBjb250cm9sIGluc3RhbmNlb2YgU3R5bGVkVGV4dCk7DQotCQlpbnQgdmFySW5kZXggPSBjb250ZW50cy5pbmRleE9mKCJ2YXIiKTsNCi0JCVN0eWxlUmFuZ2VbXSBzdHlsZVJhbmdlcyA9ICgoU3R5bGVkVGV4dCkgY29udHJvbCkuZ2V0U3R5bGVSYW5nZXModmFySW5kZXgsIDMpOw0KLQkJYXNzZXJ0VHJ1ZSgibm8gc3R5bGUgcmFuZ2UgZm9yICd2YXInIGtleXdvcmQgKHRoaXMgdGVzdCBtYXkgZmFpbCBkdWUgdG8gdW5wcmVkaWN0YWJsZSB0aW1pbmcgaXNzdWVzIHdpdGggdGhlIHRlc3Qgd29ya2JlbmNoKSIsIHN0eWxlUmFuZ2VzLmxlbmd0aCA+IDApOw0KLQkJYXNzZXJ0Tm90TnVsbCgibm8gZm9yZWdyb3VuZCBjb2xvciBmb3IgJ3Zhcicga2V5d29yZCIsIHN0eWxlUmFuZ2VzWzBdLmZvcmVncm91bmQpOw0KLQkJYXNzZXJ0Tm90U2FtZSgiZm9yZWdyb3VuZCBjb2xvciBoYXMgc2FtZSBSR0IgYXMgYmxhY2siLCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spLmdldFJHQigpLCBzdHlsZVJhbmdlc1swXS5mb3JlZ3JvdW5kLmdldFJHQigpKTsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9KU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL0pTVHJhbnNsYXRpb25FZGl0b3JJbnB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWJmMGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL0pTVHJhbnNsYXRpb25FZGl0b3JJbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy50cmFuc2xhdGlvbjsNCi0NCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQZXJzaXN0YWJsZUVsZW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSUpzVHJhbnNsYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRvY3VtZW50SW5wdXRTdHJlYW07DQotDQotLyoqDQotICogQGF1dGhvciBuaXRpbg0KLSAqIA0KLSAqLw0KLXB1YmxpYyBjbGFzcyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQgaW1wbGVtZW50cyBJU3RvcmFnZUVkaXRvcklucHV0IHsNCi0JcHJpdmF0ZSBjbGFzcyBKU1RyYW5zbGF0aW9uU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsNCi0JCXByaXZhdGUgZmluYWwgSUpzVHJhbnNsYXRpb24gZlRyYW5zbGF0aW9uOw0KLQkJZmluYWwgU3RyaW5nIGZCYXNlTG9jYXRpb247DQotDQotCQlwdWJsaWMgSlNUcmFuc2xhdGlvblN0b3JhZ2UoSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24sIFN0cmluZyBiYXNlTG9jYXRpb24pIHsNCi0JCQlmVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjsNCi0JCQlmQmFzZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uOwkJCQ0KLQkJfQ0KLQ0KLQkJLyoNCi0JCSAqIChub24tSmF2YWRvYykNCi0JCSAqIA0KLQkJICogQHNlZQ0KLQkJICogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpDQotCQkgKi8NCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7DQotCQkJcmV0dXJuIG51bGw7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkNCi0JCSAqLw0KLQkJcHVibGljIElucHV0U3RyZWFtIGdldENvbnRlbnRzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gew0KLQkJCXJldHVybiBuZXcgRG9jdW1lbnRJbnB1dFN0cmVhbShuZXcgRG9jdW1lbnQoZlRyYW5zbGF0aW9uLmdldEpzVGV4dCgpKSk7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldEZ1bGxQYXRoKCkNCi0JCSAqLw0KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgew0KLQkJCXJldHVybiBuZXcgUGF0aChmVHJhbnNsYXRpb24uZ2V0SmF2YVBhdGgoKSk7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQ0KLQkJICovDQotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQotCQkJcmV0dXJuIG5ldyBQYXRoKGZCYXNlTG9jYXRpb24pLmxhc3RTZWdtZW50KCkgKyAiLmpzIjsNCi0JCX0NCi0NCi0JCS8qDQotCQkgKiAobm9uLUphdmFkb2MpDQotCQkgKiANCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjaXNSZWFkT25seSgpDQotCQkgKi8NCi0JCXB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7DQotCQkJcmV0dXJuIGZhbHNlOw0KLQkJfQ0KLQl9DQotDQotCXByaXZhdGUgSlNUcmFuc2xhdGlvblN0b3JhZ2UgZlN0b3JhZ2U7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQoSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24sIFN0cmluZyBiYXNlTG9jYXRpb24pIHsNCi0JCWZTdG9yYWdlID0gbmV3IEpTVHJhbnNsYXRpb25TdG9yYWdlKHRyYW5zbGF0aW9uLCBiYXNlTG9jYXRpb24pOw0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2V4aXN0cygpDQotCSAqLw0KLQlwdWJsaWMgYm9vbGVhbiBleGlzdHMoKSB7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykNCi0JICovDQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQ0KLQkgKi8NCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkNCi0JICovDQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCi0JCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0UGVyc2lzdGFibGUoKQ0KLQkgKi8NCi0JcHVibGljIElQZXJzaXN0YWJsZUVsZW1lbnQgZ2V0UGVyc2lzdGFibGUoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpDQotCSAqLw0KLQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCXJldHVybiBmU3RvcmFnZTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpDQotCSAqLw0KLQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgew0KLQkJcmV0dXJuIGZTdG9yYWdlLmZCYXNlTG9jYXRpb247DQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvdHJhbnNsYXRpb24vUnVuQ29kZUhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1J1bkNvZGVIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjgxNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvdHJhbnNsYXRpb24vUnVuQ29kZUhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuVGV4dEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5JQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUphdmFTY3JpcHRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUphdmFTY3JpcHRVbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5KYXZhU2NyaXB0Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLkphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5BU1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5BU1RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5Bc3NpZ25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkV4cHJlc3Npb25TdGF0ZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uRnVuY3Rpb25JbnZvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkphdmFTY3JpcHRVbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLk9iamVjdExpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uT2JqZWN0TGl0ZXJhbEZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uU3RyaW5nTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC5jb3JlLkRvY3VtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC5jb3JleHQuVmFsaWRhdGVFZGl0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLmNvcmV4dC51dGlsLkphdmFNb2RlbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhRWRpdG9yOwotCi0KLS8qKgotICogQ29ubmVjdGVkIGhhbmRsZXIgZm9yIHdoYXRldmVyIHdlIG5lZWQgaXQgdG8gYmUKLSAqIAotICogSW52b2tlIHdpdGggTTErTTIrNwotICogCi0gKiBAYXV0aG9yIG5pdGluCi0gKi8KLXB1YmxpYyBjbGFzcyBSdW5Db2RlSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgUnVuQ29kZUhhbmRsZXIoKSB7Ci0JfQotCi0KLQlzdGF0aWMgZmluYWwgY2xhc3MgTXlOb2RlVmlzaXRvciBleHRlbmRzIEFTVFZpc2l0b3J7Ci0JCUlKYXZhU2NyaXB0VW5pdCBqc1VuaXQ7Ci0JCVN0cmluZyBjbGFzc05hbWU7Ci0JCXByaXZhdGUgSmF2YVNjcmlwdFVuaXQgY3U7Ci0JCQotCQlwdWJsaWMgTXlOb2RlVmlzaXRvcihJSmF2YVNjcmlwdFVuaXQganNVbml0LCBTdHJpbmcgY2xhc3NOYW1lLCBBU1ROb2RlIGFzdCkgewotCQkJc3VwZXIoKTsKLQkJCXRoaXMuanNVbml0ID0ganNVbml0OwotCQkJdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0JCQl0aGlzLmN1ID0gKEphdmFTY3JpcHRVbml0KSBhc3Q7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKLS8vCQkJdGhpcy5qc1VuaXQgPSAoSUphdmFTY3JpcHRVbml0KSBub2RlLmdldFJvb3QoKTsKLQkJCUJsb2NrIGJvZHkgPSBub2RlLmdldEJvZHkoKTsKLQkJCXRyeSB7Ci0JCQkJSUphdmFTY3JpcHRFbGVtZW50IGVsZW1lbnQgPSBqc1VuaXQuZ2V0RWxlbWVudEF0KGJvZHkuZ2V0U3RhcnRQb3NpdGlvbigpKTsKLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGdW5jdGlvbikgewotCQkJCQlJRnVuY3Rpb24gZnVuY3Rpb24gPSAoSUZ1bmN0aW9uKSBlbGVtZW50OwotCQkJCQlpZiAoIWZ1bmN0aW9uLmlzQ29uc3RydWN0b3IoKSAmJiBmdW5jdGlvbi5nZXREaXNwbGF5TmFtZSgpLmVxdWFscygic2F5SGVsbG8iKSkgewotCQkJCQkJSVR5cGUgdHlwZSA9IGZ1bmN0aW9uLmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJCWlmICh0eXBlICE9IG51bGwgLyomJiB0eXBlLmdldERpc3BsYXlOYW1lKCkuZXF1YWxzKGNsYXNzTmFtZSkqLykgewotCQkJCQkJCWN1LnJlY29yZE1vZGlmaWNhdGlvbnMoKTsKLQkJCQkJCQlBU1QgYXN0ID0gbm9kZS5nZXRBU1QoKTsKLQkJCQkJCQkKLS8vCQkJCQkJCVN0cmluZyBuZXdGaWVsZCA9ICJkb2pvLmRlY2xhcmUoXCJ0ZW1wXCIsIG51bGwse2hhbmRsZXIgOiBmdW5jdGlvbigpeyB9fSk7IjsKLQkJCQkJCQlTdHJpbmcgZnVuY3Rpb25MaXRlcmFsID0gImhhbmRsZXIgOiBmdW5jdGlvbihhcmdzKXthbGVydChcIkhlbGxvXCIpO30iOwotCQkJCQkJCU9iamVjdExpdGVyYWxGaWVsZCBmaWVsZCA9IGdldE9iamVjdExpdGVyYWxGaWVsZChmdW5jdGlvbkxpdGVyYWwpOwotCQkJCQkJCQotCQkJCQkJCS8vY3JlYXRpbmcgdGhlIGZ1bmN0aW9uCi0vLwkJCQkJCQlBU1QgcGFyZW50QVNUID0gbm9kZS5nZXRQYXJlbnQoKS5nZXRBU1QoKTsKLS8vCQkJCQkJCUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVjbCA9IHBhcmVudEFTVC5uZXdGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0vLwkJCQkJCQlkZWNsLnNldE5hbWUocGFyZW50QVNULm5ld1NpbXBsZU5hbWUoImhhbmRsZXIiKSk7Ci0vLwkJCQkJCQlCbG9jayBibG9jayA9IHBhcmVudEFTVC5uZXdCbG9jaygpOwotLy8vLwkJCQkJCQlibG9jay5zdGF0ZW1lbnRzKCkuYWRkKHBhcmVudEFTVC5uZXdFeHByZXNzaW9uU3RhdGVtZW50KHBhcmVudEFTVC5uZXdCbG9ja0NvbW1lbnQoKSkpOwotLy8JCQkJCQkJZGVjbC5zZXRCb2R5KGJsb2NrKTsKLQkJCQkJCQlMaXN0IGZpZWxkcyA9ICgoT2JqZWN0TGl0ZXJhbCkobm9kZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSkpLmZpZWxkcygpOwotCQkJCQkJCQotCQkJCQkJCWZpZWxkcy5hZGQoZmllbGQpOwotLy8JCQkJCQkJbm9kZS5nZXRQYXJlbnQoKS5nZXRCb2R5KCkuc3RhdGVtZW50cygpLmFkZChkZWNsKTsKLQkJCQkJCQkKLS8vCQkJCQkJCVNvdXJjZVR5cGUgc3R5IDsKLS8vCQkJCQkJCXN0eS5jcmVhdGVNZXRob2QoY29udGVudHMsIHNpYmxpbmcsIGZvcmNlLCBtb25pdG9yKQotLy8JCQkJCQkJRXhwcmVzc2lvblN0YXRlbWVudCBzdCA9IHBhcmVudEFTVC5uZXdFeHByZXNzaW9uU3RhdGVtZW50KGRlY2wpOwotCQkJCQkJCQotCQkJCQkJCQotCi0JCQkJCQkJRnVuY3Rpb25JbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBhc3QubmV3RnVuY3Rpb25JbnZvY2F0aW9uKCk7Ci0JCQkJCQkJUXVhbGlmaWVkTmFtZSBuYW1lID0gYXN0Lm5ld1F1YWxpZmllZE5hbWUoYXN0Lm5ld1NpbXBsZU5hbWUoImRvam8iKSxhc3QubmV3U2ltcGxlTmFtZSgiY29ubmVjdCIpKTsvLyROT04tTkxTLTEkCi0JCQkJCQkJbWV0aG9kSW52b2NhdGlvbi5zZXRFeHByZXNzaW9uKG5hbWUpOwotCQkJCQkJCW1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzKCkuYWRkKGFzdC5uZXdTaW1wbGVOYW1lKCJhIikpOwotCQkJCQkJCVN0cmluZ0xpdGVyYWwgbGl0ID0gYXN0Lm5ld1N0cmluZ0xpdGVyYWwoKTsKLQkJCQkJCQlsaXQuc2V0TGl0ZXJhbFZhbHVlKCJhIik7Ci0JCQkJCQkJbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMoKS5hZGQobGl0KTsKLQkJCQkJCQlFeHByZXNzaW9uU3RhdGVtZW50IGV4cHJlc3Npb25TdGF0ZW1lbnQgPSBhc3QubmV3RXhwcmVzc2lvblN0YXRlbWVudChtZXRob2RJbnZvY2F0aW9uKTsKLQkJCQkJCQlib2R5LnN0YXRlbWVudHMoKS5hZGQoZXhwcmVzc2lvblN0YXRlbWVudCk7Ci0JCQkJCQkJCi0JCQkJCQkJVGV4dEVkaXQgZWRpdHM9IGN1LnJld3JpdGUoZ2V0RG9jdW1lbnQoanNVbml0KSwgSmF2YVNjcmlwdENvcmUuZ2V0RGVmYXVsdE9wdGlvbnMoKSk7CQkJCQkJCQotCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCUphdmFNb2RlbFV0aWwuYXBwbHlFZGl0KGpzVW5pdCwgZWRpdHMsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQkJCX0gY2F0Y2ggKFZhbGlkYXRlRWRpdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQkJCX0KLQkJCQkJCQkKLQkJCQkJCQkKLS8vCQkJCQkJCWpzVW5pdC5iZWNvbWVXb3JraW5nQ29weShudWxsKTsKLQotCQkJCQkJCS8vIGdldCBzb3VyY2UgYW5kIG1ha2UgY2hhbmdlcyB0byB0aGUgYm9keSBkaXJlY3RseSBpbiB0aGUgYnVmZmVyCi0vLwkJCQkJCQlTdHJpbmcgc291cmNlID0ganNVbml0LmdldEJ1ZmZlcigpLmdldFRleHQoYm9keS5nZXRTdGFydFBvc2l0aW9uKCksIGJvZHkuZ2V0TGVuZ3RoKCkpOwotLy8JCQkJCQkJU3RyaW5nIHRvSW5zZXJ0ID0gIlx0ZG9qby5jb25uZWN0KGEgLGIgLCBjLCBkKTtcbiI7Ci0vLwkJCQkJCQlpbnQgb2Zmc2V0ID0gYm9keS5nZXRTdGFydFBvc2l0aW9uKCkrIGJvZHkuZ2V0TGVuZ3RoKCktMTsKLS8vCQkJCQkJCUlCdWZmZXIgYnVmZmVyID0ganNVbml0LmdldEJ1ZmZlcigpOwotLy8JCQkJCQkJYnVmZmVyLnJlcGxhY2Uob2Zmc2V0LCAwLCB0b0luc2VydCk7Ci0JCQkJCQkJCQkKLQkJCQkJCQkvLyBPUiBidWlsZCB0aGUgc3ludGF4IHVwIHVzaW5nIEFTVCBtYW5pcHVsYXRpb24KLQkJCQkJCQkKLS8vCQkJCQkJCQotCQkJCQkJCQotLy8JCQkJCQkJSW1wb3J0RGVjbGFyYXRpb24gaWQgPSBub2RlQXN0Lm5ld0ltcG9ydERlY2xhcmF0aW9uKCk7Ci0vLwkJCQkJCQkgaWQuc2V0TmFtZShub2RlQXN0Lm5ld05hbWUobmV3IFN0cmluZ1tdIHsiamF2YSIsICJ1dGlsIiwgIlNldCJ9KSk7Ci0vLwkJCQkJCQkgCi0vLwkJCQkJCQkJCUZ1bmN0aW9uSW52b2NhdGlvbiByZXBsYWNlbWVudD0gbm9kZUFzdC5uZXdGdW5jdGlvbkludm9jYXRpb24oKTsKLS8vCQkJCQkJCQkJCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgQVNUUmV3cml0ZSByZXdyaXRlciA9IEFTVFJld3JpdGUuY3JlYXRlKG5vZGVBc3QpOwotLy8JCQkJCQkJIAotLy8JCQkJCQkJIHJlcGxhY2VtZW50LnNldE5hbWUoKFNpbXBsZU5hbWUpIHJld3JpdGVyLmNyZWF0ZUNvcHlUYXJnZXQoZnVuY3Rpb24uZ2V0TmFtZSgpKSk7Ci0vLwkJCQkJCQkJcmVwbGFjZW1lbnQuYXJndW1lbnRzKCkuYWRkKG5vZGVBc3QubmV3VGhpc0V4cHJlc3Npb24oKSk7Ci0vLwkJCQkJCQkJcmVwbGFjZW1lbnQuc2V0RXhwcmVzc2lvbigoRXhwcmVzc2lvbikgcmV3cml0ZXIuY3JlYXRlQ29weVRhcmdldChyaWdodCkpOwotLy8JCQkJCQkJCXJld3JpdGVyLnJlcGxhY2UobWV0aG9kLCByZXBsYWNlbWVudCwgbnVsbCk7Ci0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgVHlwZURlY2xhcmF0aW9uIHRkID0gKFR5cGVEZWNsYXJhdGlvbikgY3UudHlwZXMoKS5nZXQoMCk7Ci0vLwkJCQkJCQkgSVRyYWNrZWROb2RlUG9zaXRpb24gdGRMb2NhdGlvbiA9IHJld3JpdGVyLnRyYWNrKHRkKTsKLS8vCQkJCQkJCSBMaXN0UmV3cml0ZSBscncgPSByZXdyaXRlci5nZXRMaXN0UmV3cml0ZShjdSwgSmF2YVNjcmlwdFVuaXQuVFlQRVNfUFJPUEVSVFkpOwotLy8JCQkJCQkJIGxydy5pbnNlcnRMYXN0KGlkLCBudWxsKTsKLS8vCQkJCQkJCSBJRG9jdW1lbnQgZG9jID0gZ2V0RG9jdW1lbnQoanNVbml0KTsKLS8vCQkJCQkJCSBUZXh0RWRpdCBlZGl0cyA9IHJld3JpdGVyLnJld3JpdGVBU1QoZG9jLCBudWxsKTsKLS8vCQkJCQkJCSB0cnkgewotLy8JCQkJCQkJCVVuZG9FZGl0IHVuZG8gPSBlZGl0cy5hcHBseShkb2MpOwotLy8JCQkJCQkJfSBjYXRjaCAoTWFsZm9ybWVkVHJlZUV4Y2VwdGlvbiBlMSkgewotLy8JCQkJCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLS8vCQkJCQkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQkJCQkJCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUxKSB7Ci0vLwkJCQkJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotLy8JCQkJCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCQkJCQkJfQotLy8JCQkJCQkJCi0KLS8vCQkJCQkJCWpzVW5pdC5jb21taXRXb3JraW5nQ29weSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLS8vCQkJCQkJCWpzVW5pdC5kaXNjYXJkV29ya2luZ0NvcHkoKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX07Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9FeGVjdXRlKElGaWxlIGpzRmlsZSkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0ganNGaWxlLmdldFByb2plY3QoKTsKLS8vCQlTdHJpbmcgbmFtZXNwYWNlID0gQ29kZUdlblV0aWwuZ2V0TmFtZVNwYWNlKHByb2plY3QpOwotLy8JCWZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSBJUENDb21tYW5kVXRpbC5nZXRQb3J0bGV0SGVscGVyQ2xhc3NOYW1lKGpzRmlsZSwgbmFtZXNwYWNlKTsKLQkJZmluYWwgSUphdmFTY3JpcHRVbml0IGpzVW5pdCA9IChJSmF2YVNjcmlwdFVuaXQpIEphdmFTY3JpcHRDb3JlLmNyZWF0ZShqc0ZpbGUpOwotCQkKLQkJaWYgKGpzVW5pdCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBudWxsOwotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQkKLQkJCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCQotCQkvLyB0aGlzIHBhcnQgbWF5IG5vdCBiZSBvZiBpbnRlcmVzdCBmb3Igd2hhdCB5b3UncmUgdHJ5aW5nIHRvIGRvCi0vLwkJSVR5cGUgdCA9IG51bGw7Ci0vLwkJdHJ5ewotLy8JCQlmb3IgKG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUZ1bmN0aW9uIGZ1bmN0aW9uIDoganNVbml0LmdldEZ1bmN0aW9ucygpKSB7Ci0vLwkJCQkvLyBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gdGhlIGZpbGUgb3V0c2lkZSBvZiBhbnkgdHlwZXMKLS8vCQkJCW9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSVNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlID0gZnVuY3Rpb24uZ2V0U291cmNlUmFuZ2UoKTsKLS8vCQkJCVN0cmluZyBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCkuZ2V0VGV4dChzb3VyY2VSYW5nZS5nZXRPZmZzZXQoKSwgc291cmNlUmFuZ2UuZ2V0TGVuZ3RoKCkpOwotLy8JCQl9Ci0vLwkKLS8vCQkJLy8gc3RhcnQgd2l0aCB0aGUgdHlwZXMgaW4gdGhlIGZpbGUKLS8vCQkJSVR5cGVbXSB0eXBlcyA9IGpzVW5pdC5nZXRUeXBlcygpOwotLy8JCQkKLS8vCQkJZm9yIChJVHlwZSB0eXBlOiB0eXBlcykgewotLy8vLwkJCQlpZiAodHlwZS5nZXREaXNwbGF5TmFtZSgpLmVxdWFscyhjbGFzc05hbWUpKSB7Ci0vLwkJCQkJdCA9IHR5cGU7Ci0vLwkJCQkJZm9yIChJRnVuY3Rpb24gZnVuY3Rpb24gOiB0eXBlLmdldEZ1bmN0aW9ucygpKSB7Ci0vLwkJCQkJCS8vIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiBhIHR5cGUKLS8vCQkJCQkJaWYoZnVuY3Rpb24uZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoInNheUhlbGxvIikgJiYgIWZ1bmN0aW9uLmlzQ29uc3RydWN0b3IoKSkgewotLy8JCQkJCQkJSVNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlID0gZnVuY3Rpb24uZ2V0U291cmNlUmFuZ2UoKTsKLS8vCQkJCQkJCVN0cmluZyBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCkuZ2V0VGV4dChzb3VyY2VSYW5nZS5nZXRPZmZzZXQoKSwgc291cmNlUmFuZ2UuZ2V0TGVuZ3RoKCkpOwotLy8JCQkJCQl9Ci0vLwkJCQkJfQotLy8vLwkJCQl9Ci0vLwkJCX0KLS8vCQl9Y2F0Y2ggKEphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0vLwkJCS8vIFRPRE86IGhhbmRsZSBleGNlcHRpb24KLS8vCQkJLy87Ci0vLwkJfQotCi0JCS8vSXQgd291bGQgYmUgbW9yZSBhY2N1cmF0ZSB0byB3YWxrIHRoZSBBU1Qgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBzZWFyY2hpbmcganVzdCB0aGUgdG9wLWxldmVsIGNoaWxkcmVuOgotLy8JCVNvdXJjZVR5cGUgc3QgPSBudWxsOwotLy8JCWlmKHQgaW5zdGFuY2VvZiBTb3VyY2VUeXBlKQotLy8JCQlzdCA9IChTb3VyY2VUeXBlKSB0OwotLy8JCXRyeSB7Ci0vLwkJCWlmKHN0IT1udWxsKQotLy8JCQkJc3QuY3JlYXRlTWV0aG9kKCJmdW5jdGlvbiBoZWxsbyhhcmdzKXt9IiwgbnVsbCwgZmFsc2UsIG51bGwpOwotLy8JCQkKLS8vCQl9IGNhdGNoIChKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gZSkgewotLy8JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotCQlBU1RQYXJzZXIgcGFyc2VyID0gb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUUGFyc2VyLm5ld1BhcnNlcihBU1QuSkxTMyk7Ci0JCXBhcnNlci5zZXRTb3VyY2UoanNVbml0KTsKLQkJQVNUTm9kZSBhc3QgPSBwYXJzZXIuY3JlYXRlQVNUKG51bGwpOwotCQlBU1RWaXNpdG9yIHZpc2l0b3IgPSBuZXcgTXlOb2RlVmlzaXRvcihqc1VuaXQsLypjbGFzc05hbWUqL251bGwgLCBhc3QpOwkJCQotCQlhc3QuYWNjZXB0KHZpc2l0b3IpOwotCQkKLQkJCi0JfQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0KLS8vCQkKLS8vCQl0cnkgewotLy8JCQkvLyBUT0RPOiBjaGVjayBmb3IgZGlydHkgc3RhdGUgZmlyc3QsIGFuZCBzYXZlIGFsbCB0aGUgb3BlbmVkIGRvY3VtZW50cwotLy8JCQkvL3RoZW4gZG8gdGhlIG9wZXJhdGlvbgotLy8JCQkKLS8vCQkJanNVbml0LmJlY29tZVdvcmtpbmdDb3B5KG1vbml0b3IpOwotLy8JCQlJSmF2YVNjcmlwdEVsZW1lbnRbXSBjaGlsZHJlbiA9IGpzVW5pdC5nZXRDaGlsZHJlbigpOwotLy8JCQlmb3IgKElKYXZhU2NyaXB0RWxlbWVudCBqYXZhU2NyaXB0RWxlbWVudCA6IGNoaWxkcmVuKSB7Ci0vLwkJCQlpZihqYXZhU2NyaXB0RWxlbWVudCBpbnN0YW5jZW9mIFNvdXJjZVR5cGUpewotLy8JCQkJCVNvdXJjZVR5cGUgc3QgPSAoU291cmNlVHlwZSkgamF2YVNjcmlwdEVsZW1lbnQ7Ci0vLwkJCQkJaWYoc3QuaXNDbGFzcygpKXsKLS8vCQkJCQkJaWYoc3QuZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoY2xhc3NOYW1lKSl7Ci0vLwkJCQkJCQlTb3VyY2VUeXBlRWxlbWVudEluZm8gaW5mbyA9IChTb3VyY2VUeXBlRWxlbWVudEluZm8pIHN0LmdldEVsZW1lbnRJbmZvKCk7Ci0vLwkJCQkJCQlJSmF2YVNjcmlwdEVsZW1lbnRbXSBpbmZvQ2hpbGRyZW4gPWluZm8uZ2V0Q2hpbGRyZW4oKTsKLS8vCQkJCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLS8vCQkJCQkJCVNvdXJjZU1ldGhvZCBtZXRob2QgPSBudWxsOwotLy8JCQkJCQkJZm9yIChJSmF2YVNjcmlwdEVsZW1lbnQgamF2YVNjcmlwdEVsZW1lbnQyIDogaW5mb0NoaWxkcmVuKSB7Ci0vLwkJCQkJCQkJaWYoamF2YVNjcmlwdEVsZW1lbnQyIGluc3RhbmNlb2YgU291cmNlTWV0aG9kKXsKLS8vCQkJCQkJCQkJbWV0aG9kID0gKFNvdXJjZU1ldGhvZCkgamF2YVNjcmlwdEVsZW1lbnQyOwotLy8JCQkJCQkJCQlpZihtZXRob2QuZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoInNheUhlbGxvIikpewotLy8JCQkJCQkJCQkJZm91bmQgPSB0cnVlOwotLy8JCQkJCQkJCQkJYnJlYWs7Ci0vLwkJCQkJCQkJCX0KLS8vCQkJCQkJCQl9Ci0vLwkJCQkJCQl9Ci0vLwkJCQkJCQlpZihmb3VuZCl7Ci0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJSVBhdGggZmlsZVBhdGggPSBqc0ZpbGUuZ2V0RnVsbFBhdGgoKTsKLS8vCQkJCQkJCQlTdHJpbmcgdG9JbnNlcnQgPSAiZG9qby5jb25uZWN0KGEgLGIgLCBjLCBkKSI7Ci0vLwkJCQkJCQkJaW50IG9mZnNldCA9IG1ldGhvZC5nZXRTb3VyY2VSYW5nZSgpLmdldE9mZnNldCgpOwotLy8JCQkJCQkJCUlCdWZmZXIgc291cmNlID0ganNVbml0LmdldEJ1ZmZlcigpOwotLy8vLwkJCQkJCQkJc291cmNlLnJlcGxhY2Uob2Zmc2V0KzEsIDAsIHRvSW5zZXJ0KTsKLS8vLy8JCQkJCQkJCXN0LmNyZWF0ZU1ldGhvZCgiaGVsbG86IGZ1bmN0aW9uKCl7IHZhciB4PTUgfSIsIG51bGwsIHRydWUsIG1vbml0b3IpOwotLy8JCQkJCQkJCS8vbWV0aG9kLgotLy8JCQkJCQkJCUlEb2N1bWVudCBkb2N1bWVudCA9IGdldERvY3VtZW50KGpzVW5pdCk7Ci0vLwkJCQkJCQkJQ29tcGlsYXRpb25Vbml0Q2hhbmdlIHJlc3VsdCA9IG5ldyBDb21waWxhdGlvblVuaXRDaGFuZ2UoIkluc2VydCBkb2pvIGNvbm5lY3QiLCBqc1VuaXQpOwotLy8JCQkJCQkJCUFTVCBjdTsKLS8vCQkJCQkJCQlpZihqc1VuaXQgaW5zdGFuY2VvZiBKYXZhU2NyaXB0VW5pdCl7Ci0vLwkJCQkJCQkJCWN1ID0oKEphdmFTY3JpcHRVbml0KWpzVW5pdCkuZ2V0QVNUKCk7Ci0vLwkJCQkJCQkJCUFTVFJld3JpdGUgcmV3cml0ZXIgPSBBU1RSZXdyaXRlLmNyZWF0ZShjdSk7Ci0vLwkJCQkJCQkJCQotLy8JCQkJCQkJCX1lbHNlIHsKLS8vCQkJCQkJCQkJQVNUUGFyc2VyIHBhcnNlciA9IEFTVFBhcnNlci5uZXdQYXJzZXIoQVNULkpMUzMpOwotLy8JCQkJCQkJCQkgcGFyc2VyLnNldFNvdXJjZShkb2N1bWVudC5nZXQoKS50b0NoYXJBcnJheSgpKTsKLS8vCQkJCQkJCQkJIEphdmFTY3JpcHRVbml0IGN1ID0gKEphdmFTY3JpcHRVbml0KSBwYXJzZXIuY3JlYXRlQVNUKG51bGwpOwotLy8JCQkJCQkJCQkgY3UgPSBjdS5nZXRBU1QoKTsKLS8vCQkJCQkJCQkJIGN1LmdldEJvZHlDaGlsZCgpOwotLy8JCQkJCQkJCQkgTGlzdDxPYmplY3Q+IHN0bXRzID0gY3Uuc3RhdGVtZW50cygpOwotLy8JCQkJCQkJCQkgRXhwcmVzc2lvblN0YXRlbWVudCBzdG10ID0gKEV4cHJlc3Npb25TdGF0ZW1lbnQpIHN0bXRzLmdldCgyKTsKLS8vLy8JCQkJCQkJCQkgc3RtdC5nZXQKLS8vCQkJCQkJCQkJIGZvciAoT2JqZWN0IG9iamVjdCA6IHN0bXRzKSB7Ci0vLwkJCQkJCQkJCQlvYmplY3QgPSBvYmplY3Q7Ci0vLwkJCQkJCQkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpb2JqZWN0KS5nZXRBU1QoKTsKLS8vCQkJCQkJCQkJCS8vQVNUTm9kZXMuZ2V0Qm9keURlY2xhcmF0aW9ucygoRXhwcmVzc2lvblN0YXRlbWVudClvYmplY3QpOwotLy8JCQkJCQkJCQkJRnVuY3Rpb25JbnZvY2F0aW9uIGZpID0gKEZ1bmN0aW9uSW52b2NhdGlvbikgKEFTVE5vZGVzLmdldENoaWxkcmVuKChFeHByZXNzaW9uU3RhdGVtZW50KW9iamVjdCkpLmdldCgwKTsKLS8vCQkJCQkJCQkJCWZpLmdldEJvZHlDaGlsZCgpOwotLy8vLwkJCQkJCQkJCQlmaS4KLS8vCQkJCQkJCQkJfQotLy8JCQkJCQkJCQkgCi0vLwkJCQkJCQkJCSBGdW5jdGlvbkludm9jYXRpb24gaW52b2NhdGlvbiA9IGN1Lm5ld0Z1bmN0aW9uSW52b2NhdGlvbigpOwotLy8JCQkJCQkJCX0KLS8vCQkJCQkJCQkJCi0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJLy90ZXN0aW5nIG9ubHkuLi4KLS8vLy8JCQkJCQkJCUlKYXZhU2NyaXB0RWxlbWVudFtdIGVsZW1lbnRzID0gbWV0aG9kLmdldENoaWxkcmVuKCk7Ci0vLy8vCQkJCQkJCQlTdHJpbmcgc291cmNlID0gbWV0aG9kLmdldFNvdXJjZSgpOwotLy8vLwkJCQkJCQkJT2JqZWN0IGluZm8xID0gbWV0aG9kLmdldEVsZW1lbnRJbmZvKCk7Ci0vLy8vCQkJCQkJCQlJSmF2YVNjcmlwdE1vZGVsIG1vZGVsID0gbWV0aG9kLmdldEphdmFTY3JpcHRNb2RlbCgpOwotLy8vLy8vCQkJCQkJCQltb2RlbCA9IG1vZGVsOwotLy8vLwkJCQkJCQkJc3QuY3JlYXRlTWV0aG9kKCJteWZ1biA6IGZ1bmN0aW9uKCl7fSIsIG1ldGhvZCwgdHJ1ZSwgbW9uaXRvcik7Ci0vLwkJCQkJCQl9Ci0vLy8vCQkJCQkJCWluZm8gPSBpbmZvOwotLy8JCQkJCQl9Ci0vLwkJCQkJCQotLy8JCQkJCX0KLS8vCQkJCX0KLS8vCQkJfQotLy8vLwkJCVN0cmluZyB0b0luc2VydCA9ICJkb2pvLmNvbm5lY3QoYSAsYiAsIGMsIGQpIjsKLS8vLy8JCQlpbnQgb2Zmc2V0ID0gNTA7Ci0vLy8vCQkJSUJ1ZmZlciBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCk7Ci0vLy8vCQkJc291cmNlLnJlcGxhY2Uob2Zmc2V0KzEsIDAsIHRvSW5zZXJ0KTsKLS8vLy8JCQlJQnVmZmVyIHNvdXJjZSA9IGpzVW5pdC5nZXRCdWZmZXIoKTsKLS8vLy8JCQlqc1VuaXQuZ2V0QnVmZmVyKCkuYXBwZW5kKCJcbiIgKyAidmFyIHg7Iik7Ci0vLwkJCWpzVW5pdC5jb21taXRXb3JraW5nQ29weSh0cnVlLCBtb25pdG9yKTsKLS8vCQkJanNVbml0LmRpc2NhcmRXb3JraW5nQ29weSgpOwotLy8JCX0gY2F0Y2ggKEphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0vLwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0KLQkKLQkKLQlwcm90ZWN0ZWQgc3RhdGljIElEb2N1bWVudCBnZXREb2N1bWVudChJSmF2YVNjcmlwdFVuaXQgY3UpIHRocm93cyBKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gewotCQlJQnVmZmVyIGJ1ZmZlciA9IGN1LmdldEJ1ZmZlcigpOwotCQlpZiAoYnVmZmVyIGluc3RhbmNlb2YgSURvY3VtZW50KQotCQkJcmV0dXJuIChJRG9jdW1lbnQpIGJ1ZmZlcjsKLQkJcmV0dXJuIG5ldyBEb2N1bWVudEFkYXB0ZXIoYnVmZmVyKTsKLQl9Ci0JCi0Jc3RhdGljIE9iamVjdExpdGVyYWxGaWVsZCBnZXRPYmplY3RMaXRlcmFsRmllbGQoU3RyaW5nIHNvdXJjZSl7Ci0JCVN0cmluZyBqcyA9ICJ4LnByb3RvdHlwZSA9IHsiICsgc291cmNlICsgIn0iOwotCQlKYXZhU2NyaXB0VW5pdCBqc3UgPSBnZXRBU1QoanMpOwotCQlFeHByZXNzaW9uU3RhdGVtZW50IHN0bXQgPSAoRXhwcmVzc2lvblN0YXRlbWVudClqc3Uuc3RhdGVtZW50cygpLmdldCgwKTsKLQkJT2JqZWN0TGl0ZXJhbCBsaXQgPSAoT2JqZWN0TGl0ZXJhbCkoKEFzc2lnbm1lbnQpIHN0bXQuZ2V0RXhwcmVzc2lvbigpKS5nZXRSaWdodEhhbmRTaWRlKCk7CQkKLQkJT2JqZWN0TGl0ZXJhbEZpZWxkIGZpZWxkID0gKE9iamVjdExpdGVyYWxGaWVsZCkgbGl0LmZpZWxkcygpLmdldCgwKTsKLQkJQVNUTm9kZSBub2RlID0gQVNUTm9kZS5jb3B5U3VidHJlZShqc3UuZ2V0QVNUKCksIGZpZWxkKTsKLQkJcmV0dXJuIChPYmplY3RMaXRlcmFsRmllbGQpIG5vZGU7Ci0JfQotCQotCXN0YXRpYyBKYXZhU2NyaXB0VW5pdCBnZXRBU1QoU3RyaW5nIHNvdXJjZSl7Ci0JCUFTVFBhcnNlciBwYXJzZXIgPSBBU1RQYXJzZXIubmV3UGFyc2VyKEFTVC5KTFMzKTsKLQkJcGFyc2VyLnNldFNvdXJjZShzb3VyY2UudG9DaGFyQXJyYXkoKSk7Ci0JCUFTVE5vZGUgYXN0ID0gcGFyc2VyLmNyZWF0ZUFTVChudWxsKTsKLQkJcmV0dXJuIChKYXZhU2NyaXB0VW5pdCkgYXN0OwotCX0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlCi0JICogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMKLQkgKiAuRXhlY3V0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlRWRpdG9yKGV2ZW50KTsKLQkJaWYgKCEoYWN0aXZlRWRpdG9yIGluc3RhbmNlb2YgSmF2YUVkaXRvcikpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCWRvRXhlY3V0ZSgoSUZpbGUpIEhhbmRsZXJVdGlsLmdldEFjdGl2ZUVkaXRvcihldmVudCkuZ2V0RWRpdG9ySW5wdXQoKS5nZXRBZGFwdGVyKElGaWxlLmNsYXNzKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0Y2M3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9TaG93VHJhbnNsYXRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5jb21waWxlci5JUHJvYmxlbTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVNjcmlwdFVJOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7DQotDQotDQotLyoqDQotICogT3BlbnMgdGhlIGN1cnJlbnQgbWFya3VwIGVkaXRvcidzIGN1cnJlbnQgdHJhbnNsYXRlZCBzb3VyY2UgaW4gdGhlIEphdmFTY3JpcHQgZWRpdG9yDQotICogDQotICogSW52b2tlIHdpdGggTTErTTIrOA0KLSAqIA0KLSAqIEBhdXRob3Igbml0aW4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgU2hvd1RyYW5zbGF0aW9uSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBTaG93VHJhbnNsYXRpb25IYW5kbGVyKCkgew0KLQl9DQotDQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogDQotCSAqIEBzZWUNCi0JICogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMNCi0JICogLkV4ZWN1dGlvbkV2ZW50KQ0KLQkgKi8NCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCi0JCS8vIElERS5vcGVuRWRpdG9yKGV2ZW50LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLCBjcmVhdGVFZGl0b3JJbnB1dCgpLA0KLQkJLy8gSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7DQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEN1cnJlbnRTZWxlY3Rpb24oZXZlbnQpOw0KLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQotCQkJTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsNCi0JCQlpZiAoIWxpc3QuaXNFbXB0eSgpKSB7DQotCQkJCWlmIChsaXN0LmdldCgwKSBpbnN0YW5jZW9mIElET01Ob2RlKSB7DQotCQkJCQlmaW5hbCBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsNCi0JCQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsNCi0JCQkJCWlmIChhZGFwdGVyICE9IG51bGwpIHsNCi0JCQkJCQlKb2Igb3BlbmVyID0gbmV3IFVJSm9iKCJPcGVuaW5nIEphdmFTY3JpcHQgVHJhbnNsYXRpb24iKSB7DQotCQkJCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQotCQkJCQkJCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7DQotCQkJCQkJCQlmaW5hbCBJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsNCi0NCi0JCQkJCQkJCS8vIGNyZWF0ZSBhbiBJRWRpdG9ySW5wdXQgZm9yIHRoZSBKYXZhIGVkaXRvcg0KLQkJCQkJCQkJZmluYWwgSVN0b3JhZ2VFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQodHJhbnNsYXRpb24sIG1vZGVsLmdldEJhc2VMb2NhdGlvbigpKTsNCi0JCQkJCQkJCXRyeSB7DQotCQkJCQkJCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCksIGlucHV0LCBKYXZhU2NyaXB0VUkuSURfQ1VfRURJVE9SLCB0cnVlKTsNCi0JCQkJCQkJCQkvLyBOb3cgYWRkIHRoZSBwcm9ibGVtcyB3ZSBmb3VuZA0KLQkJCQkJCQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgew0KLQkJCQkJCQkJCQlJQW5ub3RhdGlvbk1vZGVsIGFubm90YXRpb25Nb2RlbCA9ICgoSVRleHRFZGl0b3IpIGVkaXRvcikuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChpbnB1dCk7DQotCQkJCQkJCQkJCXRyYW5zbGF0aW9uLnJlY29uY2lsZUNvbXBpbGF0aW9uVW5pdCgpOw0KLQkJCQkJCQkJCQlMaXN0IHByb2JsZW1zTGlzdCA9IHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCk7DQotCQkJCQkJCQkJCUlQcm9ibGVtW10gcHJvYmxlbXMgPSAoSVByb2JsZW1bXSkgcHJvYmxlbXNMaXN0LnRvQXJyYXkobmV3IElQcm9ibGVtW3Byb2JsZW1zTGlzdC5zaXplKCldKTsNCi0JCQkJCQkJCQkJQW5ub3RhdGlvblR5cGVMb29rdXAgbG9va3VwID0gbmV3IEFubm90YXRpb25UeXBlTG9va3VwKCk7DQotCQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvYmxlbXMubGVuZ3RoOyBpKyspIHsNCi0JCQkJCQkJCQkJCWludCBsZW5ndGggPSBwcm9ibGVtc1tpXS5nZXRTb3VyY2VFbmQoKSAtIHByb2JsZW1zW2ldLmdldFNvdXJjZVN0YXJ0KCkgKyAxOw0KLQkJCQkJCQkJCQkJUG9zaXRpb24gcG9zaXRpb24gPSBuZXcgUG9zaXRpb24ocHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSwgbGVuZ3RoKTsNCi0JCQkJCQkJCQkJCUFubm90YXRpb24gYW5ub3RhdGlvbiA9IG51bGw7DQotCQkJCQkJCQkJCQlTdHJpbmcgdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfSU5GTyk7DQotCQkJCQkJCQkJCQlpZiAocHJvYmxlbXNbaV0uaXNFcnJvcigpKSB7DQotCQkJCQkJCQkJCQkJdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOw0KLQkJCQkJCQkJCQkJfQ0KLQkJCQkJCQkJCQkJZWxzZSBpZiAocHJvYmxlbXNbaV0uaXNXYXJuaW5nKCkpIHsNCi0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsNCi0JCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQkJCWFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbih0eXBlLCBmYWxzZSwgcHJvYmxlbXNbaV0uZ2V0TWVzc2FnZSgpKTsNCi0JCQkJCQkJCQkJCWlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsNCi0JCQkJCQkJCQkJCQlhbm5vdGF0aW9uTW9kZWwuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uLCBwb3NpdGlvbik7DQotCQkJCQkJCQkJCQl9DQotCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQl9DQotCQkJCQkJCQl9DQotCQkJCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgew0KLQkJCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJCQkJCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuYmVlcCgpOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7DQotCQkJCQkJCX0NCi0JCQkJCQl9Ow0KLQkJCQkJCW9wZW5lci5zZXRTeXN0ZW0oZmFsc2UpOw0KLQkJCQkJCW9wZW5lci5zZXRVc2VyKHRydWUpOw0KLQkJCQkJCW9wZW5lci5zY2hlZHVsZSgpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIG51bGw7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGUwMDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLQ0KLTxwcm9qZWN0DQotICAgIG5hbWU9InRlc3RzdWl0ZSINCi0gICAgZGVmYXVsdD0icnVuIg0KLSAgICBiYXNlZGlyPSIuIj4NCi0gICAgDQotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4NCi0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4NCi0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+DQotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+DQotDQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIg0KLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cyIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiDQotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLkFsbFdlYlVJVGVzdHMiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0idGVzdFR5cGUiDQotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4NCi0NCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4NCi0NCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+DQotDQotDQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIg0KLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0id29ya3NwYWNlIg0KLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICANCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPg0KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPg0KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4NCi0gICAgICAgIDx0c3RhbXAgLz4NCi0gICAgICAgIDxkZWxldGU+DQotICAgICAgICAgICAgPGZpbGVzZXQNCi0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iDQotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPg0KLSAgICAgICAgPC9kZWxldGU+DQotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+DQotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+DQotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPg0KLSAgICAgICAgPGRlbGV0ZQ0KLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9Ig0KLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPg0KLQ0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+DQotDQotICAgICAgICA8YW50DQotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSINCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iDQotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgPC9hbnQ+DQotDQotICAgICAgICA8Y29weQ0KLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSINCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciDQotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPg0KLQ0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+DQotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4NCi0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPg0KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+DQotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4NCi0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPg0KLSAgICA8dGFyZ2V0DQotICAgICAgICBuYW1lPSJydW4iDQotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPg0KLSAgICAgICAgPGFudA0KLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCINCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iDQotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPg0KLSAgICAgICAgPC9hbnQ+DQotICAgIDwvdGFyZ2V0Pg0KLQ0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmNiNzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxkaXYgYWxpZ249ImxlZnQiIG9uY2xpY2s9InJldHVybiB0ZXN0RnVuY3Rpb24oKSI+PC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyYWEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08ZGl2IGFsaWduPSJsZWZ0IiBvbmNsaWNrPSJyZXR1cm4gc2F2ZUNvbmZpcm0oKSI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTAtZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYzVlMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0gdGhpcyBpcyBhIHRlc3QKLQkJdmFyIHQgPSB0cnVlOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTg5YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0gdGhpcyBpcyBhIHRlc3QKLXZhciB0ID0gdHJ1ZTsKLS8vLS0+IAotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMS1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1MTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JPCEtLQotCQl2YXIgdCA9IHRydWU7Ci0JLy8gdGhpcyBpcyBhIHRlc3QgLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiY2MwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0gCi12YXIgdCA9IHRydWU7Ci0vLyB0aGlzIGlzIGEgdGVzdCAtLT4gCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTItZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEyLWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmI4YTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTItZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tIHRoaXMgaXMgYSB0ZXN0Ci0JCXZhciB0ID0gdHJ1ZTsKLQkvLyB0aGlzIGlzIGEgdGVzdCAtLT4KLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTIuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhNDczNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLSB0aGlzIGlzIGEgdGVzdAotdmFyIHQgPSB0cnVlOwotLy8gdGhpcyBpcyBhIHRlc3QgLS0+IAotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMy1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZDUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCXZhciB0ID0gdHJ1ZTsKLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciB0ID0gdHJ1ZTs8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTQtZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0LWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTE1MzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTQtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tIHZhciB0ID0gdHJ1ZTsKLQkJCi0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MWIzOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tIHZhciB0ID0gdHJ1ZTs8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Mi1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Mi1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDItZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciB0ID0gdHJ1ZTsKLQkvLy0tPgotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QyLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0KLQkJdmFyIHQgPSB0cnVlOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0My5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM3OTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0My5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JPCEtLQotCQl2YXIgdCA9IHRydWU7Ci0JLy8tLT4KLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNWRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDQtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIHQgPSB0cnVlOwotCQl2YXIgZiA9ICJmb28iOwotCQl2YXIgcSA9ICJibGEiOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTUxNzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLXZhciB0ID0gdHJ1ZTsKLXZhciBmID0gImZvbyI7Ci12YXIgcSA9ICJibGEiOwotLy8tLT4gCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMjA2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDUtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciB0ID0gdHJ1ZTsKLQkJdmFyIGYgPSAiZm9vIjsKLQkJdmFyIHEgPSAiYmxhIjsKLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q1Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDU5ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q1Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLQotCXZhciB0ID0gdHJ1ZTsKLQl2YXIgZiA9ICJmb28iOwotCXZhciBxID0gImJsYSI7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ni1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ni1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5ZDYxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIGogPSAiPGRpdj4iOwotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q2Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwY2I1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci12YXIgaiA9ICI8ZGl2PiI7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ny1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ny1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlM2M0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDctZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIHMgPSAiZm9vIjsKLQkJd2hpbGUgKHRydWUpIHsKLQkJCXZhciBpID0gNTsKLQkJfQotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q3Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiMDU4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci0JCTxoZWFkPgotCQkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci0JCQkJCQk8dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotCTwvaGVhZD4KLTxib2R5PgotCQkJCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCi12YXIgcyA9ICJmb28iOwotCQl3aGlsZSh0cnVlKSB7Ci0JCQkJCXZhciBpID0gNTsJCQkKLX0KLQkJCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OC1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzYjdkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDgtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciBqID0gIjxkaXY+IjsKLQkvLy0tPgotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q4Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViODA3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi12YXIgaiA9ICI8ZGl2PiI7Ci0vLy0tPgotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDktZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDktZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZThjOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q5LWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0KLQkJdmFyIHMgPSAiZm9vIjsKLQkJd2hpbGUgKHRydWUpIHsKLQkJCXZhciBpID0gNTsKLQkJfQotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDkuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzhjYWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLQkJPGhlYWQ+Ci0JCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLQkJCQkJCTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci0JPC9oZWFkPgotPGJvZHk+Ci0JCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJCTwhLS0KLQkKLXZhciBzID0gImZvbyI7Ci0JCXdoaWxlKHRydWUpIHsKLQkJCQkJdmFyIGkgPSA1OwkJCQotfQotCQkJCQkJLy8tLT4KLTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyZmYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2Vtb2RlbHRlc3RzLmphcgotamF2YUNvbXBpbGVyLnNzZW1vZGVsdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA3M2ZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWI0YTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5TU0VNb2RlbFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gY29tLmlibS5pY3UKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9lY2xpcHNlLmluZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9lY2xpcHNlLmluZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRjZjQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvTUVUQS1JTkYvZWNsaXBzZS5pbmYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgV2UgZG8gbm90IHdhbnQgYW55IG5lc3RlZCBqYXJzIAotIyBzaWduZWQgb3Igbm9ybWFsaXplZCBmb3IgcGFja2luZwotIyBzZWUgYnVnIDI3NDc0MyBTb21lIHVuaXQgdGVzdHMgYXJlIHNlbnNpdGl2ZSB0byBkZXRhaWxzIG9mIGJ1aWxkCi0jIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNzQ3NDMKLQotamFycHJvY2Vzc29yLmV4Y2x1ZGUuY2hpbGRyZW49dHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWFmMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBzc2Vtb2RlbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICByZXNvdXJjZXMvCi1zb3VyY2Uuc3NlbW9kZWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDA5MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Jlc291cmNlcy90ZXN0ZmlsZS5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcmVzb3VyY2VzL3Rlc3RmaWxlLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyZDE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcmVzb3VyY2VzL3Rlc3RmaWxlLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5Y2NkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLlNTRUNvcmVQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCl7Ci0JCWFzc2VydE5vdE51bGwoU1NFQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OTIyNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2JiMjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0T2JqZWN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0Tm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3RSZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnV0aWwuVGVzdEphclV0aWxpdGllczsKLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLyoqCi0JICogdG8gZ2V0IHBpY2tlZCB1cCBieSBCVlQKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFNTRU1vZGVsVGVzdFN1aXRlKCk7Ci0JfQotCi0JLy8gbm90IHJlYWR5IGZvciB0aHJlYWRlZCB0ZXN0cywgeWV0LgotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldwotCS8vIENsYXNzW117VGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5jbGFzcywKLQkvLyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzLmNsYXNzLCBUZXN0Q3JlYXRpb24uY2xhc3N9OwotCi0JLy8gcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdENyZWF0aW9uLmNsYXNzLAotCS8vIFRlc3REb2N1bWVudFJlYWRlci5jbGFzc307Ci0JLy8gcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdENyZWF0aW9uLmNsYXNzLAotCS8vIFRlc3REb2N1bWVudFJlYWRlci5jbGFzcywgVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5jbGFzcywKLQkvLyBUZXN0UmVnaW9uTWF0Y2hlcy5jbGFzc307Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtFeGlzdGVuY2VUZXN0LmNsYXNzLCBUZXN0T2JqZWN0cy5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzcywgVGVzdEphclV0aWxpdGllcy5jbGFzcywgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUuY2xhc3MsIE1vZGVsSGFuZGxlclJlZ2lzdHJ5VGVzdC5jbGFzcywgVGVzdFJlZ2lvbkxpc3QuY2xhc3N9OwotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIE1vZGVsIEJhc2ljIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMDVhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuQWJzdHJhY3RBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotCi0vKioKLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgQWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBmRmFjdG9yeSA9IG51bGw7Ci0JCi0JY2xhc3MgTXlDbGFzcyBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCXJldHVybiB0eXBlIGluc3RhbmNlb2YgTXlDbGFzczsKLQkJfQotCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsaW50IGV2ZW50VHlwZSxPYmplY3QgY2hhbmdlZEZlYXR1cmUsT2JqZWN0IG9sZFZhbHVlLE9iamVjdCBuZXdWYWx1ZSxpbnQgcG9zKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJc2V0VXBBZGFwdGVyRmFjdG9yeSgpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBBZGFwdGVyRmFjdG9yeSgpIHsKLQkJZkZhY3RvcnkgPSBuZXcgQWJzdHJhY3RBZGFwdGVyRmFjdG9yeShUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeS5NeUNsYXNzLmNsYXNzLCBmYWxzZSkgewotCQkJcHJvdGVjdGVkIElOb2RlQWRhcHRlciBjcmVhdGVBZGFwdGVyKElOb2RlTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCQkJcmV0dXJuIG5ldyBNeUNsYXNzKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGFwdCgpIHsKLQkJZkZhY3RvcnkuYWRhcHQobnVsbCk7Ci0JfQotCQotLy8JcHVibGljIHZvaWQgdGVzdEFkYXB0TmV3KCkgewotLy8JCWZGYWN0b3J5LmFkYXB0TmV3KG51bGwpOwotLy8JfQotCQotLy8JcHVibGljIHZvaWQgdGVzdENvcHkoKSB7Ci0vLwkJQWRhcHRlckZhY3RvcnkgZiA9IGZGYWN0b3J5LmNvcHkoKTsKLS8vCQlhc3NlcnROb3ROdWxsKGYpOwotLy8JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKSB7Ci0JCS8vIFRPRE86IGNyZWF0ZSB1bml0IHRlc3QKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9UZXN0VW5zdXBwb3J0ZWRDb250ZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI2YThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotCS8qKg0KLQkgKiBDcmVhdGVzIGEgc2ltcGxlIHByb2plY3QuDQotCSAqIA0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKiAgICAgICAgICAgIC0gdGhlIG5hbWUgb2YgdGhlIHByb2plY3QNCi0JICogQHJldHVybg0KLQkgKi8NCi0Jc3RhdGljIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHsNCi0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOw0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsNCi0JCXRyeSB7DQotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKQ0KLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKQ0KLQkJCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JCXJldHVybiBwcm9qZWN0Ow0KLQl9DQotDQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yUmVhZFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0UmVhZEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yRWRpdFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0RWRpdEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGYWN0b3J5VGVzdE9ubHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGYWN0b3J5VGVzdE9ubHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3YTI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBleGlzdHMgb25seSB0byBzYXRpc2Z5IHNvbWUgb2YgdGhlIHVuaXQgdGVzdHMuCi0gKiAKLSAqIFRvIHRlc3QsIHVzZSBmb2xsb3dpbmcgbGluZSBpbiBjbGllbnQsIHN1Y2ggYXMgd2hlbiBpdCBpbnRpdGlhbGl6ZWQuCi0gKiBGYWN0b3J5UmVnaXN0cnkuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShuZXcKLSAqIEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkoKSk7Ci0gKiAKLSAqIENyZWF0aW9uIGRhdGU6ICgxMS8xNC8wMCA3OjA4OjE4IFBNKQotICogCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZhY3RvcnlUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlckZhY3RvcnkgewotCS8vIFRoaXMgZmFjdG9yeSBkZWFscyB3aXRoIHRocmVlIGFkYXB0ZXJzCi0JamF2YS51dGlsLkxpc3QgYWRhcHRlcnMgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogQ0FBZGFwdGVyRmFjdG9yeSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQkJYWRhcHRlcnMuYWRkKG5ldyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpKTsKLQkJYWRhcHRlcnMuYWRkKG5ldyBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5KCkpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkoKSk7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgYWRhcHRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHRoaXMgZmFjdG9yeSBhbmQKLQkgKiB0aGUgZ2l2ZW4gb2JqZWN0LCBhbmQgInNldHMgdXAiIHRoZSBhZGFwdGFibGUgb2JqZWN0IHRvIHVzZSB0aGUKLQkgKiBhZGFwdGVyLgotCSAqIAotCSAqIFRoZSBhZGFwdGVyIG1heSBiZSBhIHNpbmdsZXRvbiBvciBub3QgLi4uIGRlcGVuZGluZyBvbiB0aGUgbmVlZHMgb2YgdGhlCi0JICogSU5vZGVBZGFwdGVyIC4uLiBidXQgaW4gZ2VuZXJhbCBpdCBpcyByZWNvbW1lbmRlZCBmb3IgYW4gYWRhcHRlciB0byBiZQotCSAqIHN0YXRlbGVzcywgc28gdGhlIGVmZmljaWVuY2llcyBvZiBhIHNpbmdsZXRvbiBjYW4gYmUgZ2FpbmVkLgotCSAqIAotCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBhZGRBZGFwdGVyIG9uIHRoZSBhZGFwdGVkCi0JICogb2JqZWN0IHdpdGggdGhlIGNvcnJlY3QgaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIuCi0JICovCi0JcHVibGljIElOb2RlQWRhcHRlciBhZGFwdChJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkvLyBvYmplY3QuYWRkQWRhcHRlcihhZGFwdGVySW5zdGFuY2UpOwotCQkvLyByZXR1cm4gYWRhcHRlckluc3RhbmNlOwotCQlJTm9kZUFkYXB0ZXIgcmVzdWx0ID0gbnVsbDsKLQotCQlJdGVyYXRvciBhZGFwdGVyc0xpc3QgPSBhZGFwdGVycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoYWRhcHRlcnNMaXN0Lmhhc05leHQoKSkgewotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSAoSU5vZGVBZGFwdGVyKSBhZGFwdGVyc0xpc3QubmV4dCgpOwotCQkJaWYgKGFkYXB0ZXIuaXNBZGFwdGVyRm9yVHlwZSh0YXJnZXQpKSB7Ci0JCQkJSU5vZGVBZGFwdGVyIGV4aXN0aW5nQWRhcHRlciA9IHRhcmdldC5nZXRFeGlzdGluZ0FkYXB0ZXIoYWRhcHRlcik7Ci0JCQkJaWYgKGV4aXN0aW5nQWRhcHRlciA9PSBudWxsKSB7Ci0JCQkJCXRhcmdldC5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJCQlyZXN1bHQgPSBhZGFwdGVyOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0KLQl9Ci0KLQkvKioKLQkgKiBpc0ZhY3RvcnlGb3JUeXBlIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLQkJLy8gZm9yIG5vdywgb25lIGFkYXB0ZXIgZm9yIGRvY3VtZW50cywgZWxlbWVudHMsIGFuZCBhdHRyLgotCQkvLwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIERvY3VtZW50KSB7Ci0JCQlyZXN1bHQgPSB0cnVlOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWlmICh0eXBlIGluc3RhbmNlb2YgQXR0cikgewotCQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJLy8gVE9ETzogY3JlYXRlIHVuaXQgdGVzdAotCi0JfQotCi0JcHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgY29weSgpIHsKLQkJcmV0dXJuIG5ldyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZjllYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCS8qKgotCSAqIENBQWRhcHRlclRlc3RPbmx5IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgQXR0cikgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yQXR0clRlc3RPbmx5ICIgKyB0aGlzLmhhc2hDb2RlKCkgKyAiIGhhcyBiZWVuIG5vdGlmaWVkIG9mICIgKyBJTm9kZU5vdGlmaWVyLkVWRU5UX1RZUEVfU1RSSU5HU1tldmVudFR5cGVdICsgIiAod2hlbiAiICsgbm90aWZpZXIgKyAiIG5vdGlmaWVkIGl0KSIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYxM2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTllODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCS8qKgotCSAqIENBQWRhcHRlclRlc3RPbmx5IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5ICIgKyB0aGlzLmhhc2hDb2RlKCkgKyAiIGhhcyBiZWVuIG5vdGlmaWVkIG9mICIgKyBJTm9kZU5vdGlmaWVyLkVWRU5UX1RZUEVfU1RSSU5HU1tldmVudFR5cGVdICsgIiAod2hlbiAiICsgbm90aWZpZXIgKyAiIG5vdGlmaWVkIGl0KSIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L0FjY2Vzc29yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjQ4MWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotCi0KLS8qKgotICogSGVscGVyIGNsYXNzIGZvciBhY2Nlc3NpbmcgY2xhc3NlcyBhbmQgbWVtYmVycyB3aGljaCBjYW5ub3QKLSAqIGJlIGFjY2Vzc2VkIHVzaW5nIHN0YW5kYXJkIEphdmEgYWNjZXNzIGNvbnRyb2wgbGlrZSBwcml2YXRlCi0gKiBvciBwYWNrYWdlIHZpc2libGUgZWxlbWVudHMuCi0gKgotICogQHNpbmNlIDMuMQotICovCi1wdWJsaWMgY2xhc3MgQWNjZXNzb3IgewotCi0JLyoqIFRoZSBjbGFzcyB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBDbGFzcyBmQ2xhc3M7Ci0JLyoqIFRoZSBpbnN0YW5jZSB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBPYmplY3QgZkluc3RhbmNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIENsYXNzIGNsYXp6KSB7Ci0JCW9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQuaXNOb3ROdWxsKGluc3RhbmNlKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGF6eik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCWZDbGFzcz0gY2xheno7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKE9iamVjdCBpbnN0YW5jZSwgU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NOYW1lKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGFzc0xvYWRlcik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyB0aGV5IG11c3QgYWxsIGJlIGluc3RhbmNlb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI0FjY2Vzc29yKFN0cmluZywgQ2xhc3NMb2FkZXIsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JBcmdzIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdGhpcyhjbGFzc05hbWUsIGNsYXNzTG9hZGVyLCBnZXRUeXBlcyhjb25zdHJ1Y3RvckFyZ3MpLCBjb25zdHJ1Y3RvckFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvclR5cGVzIHRoZSB0eXBlcyBvZiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBDbGFzc1tdIGNvbnN0cnVjdG9yVHlwZXMsIE9iamVjdFtdIGNvbnN0cnVjdG9yQXJncykgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlDb25zdHJ1Y3RvciBjb25zdHJ1Y3Rvcj0gbnVsbDsKLQkJdHJ5IHsKLQkJCWNvbnN0cnVjdG9yPSBmQ2xhc3MuZ2V0RGVjbGFyZWRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvclR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZTIpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQXNzZXJ0LmlzTm90TnVsbChjb25zdHJ1Y3Rvcik7Ci0JCWNvbnN0cnVjdG9yLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlmSW5zdGFuY2U9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKGNvbnN0cnVjdG9yQXJncyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICogPHA+Ci0JICogVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGFjY2VzcyBzdGF0aWMgc3R1ZmYuCi0JICogPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW52b2tlcyB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG1ldGhvZCBuYW1lIGFuZCBhcmd1bWVudHMuCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gZ2V0IHRoZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuCi0JICogYXJndW1lbnRzIGFsbCB0aG9zZSBhcmd1bWVudHMgbXVzdCBiZSBpbnN0YW5jZSBvZiBPYmplY3QuIFVzZQotCSAqIHtAbGluayAjaW52b2tlKFN0cmluZywgQ2xhc3NbXSwgT2JqZWN0W10pfSBpZiB0aGlzCi0JICogaXMgbm90IHRoZSBjYXNlLjwvcD4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJcmV0dXJuIGludm9rZShtZXRob2ROYW1lLCBnZXRUeXBlcyhhcmd1bWVudHMpLCBhcmd1bWVudHMpOwotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqCi0JICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG1ldGhvZCBuYW1lCi0JICogQHBhcmFtIHR5cGVzIHRoZSBhcmd1bWVudCB0eXBlcwotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMKLQkgKiBAcmV0dXJuIHRoZSBtZXRob2QgcmV0dXJuIHZhbHVlCi0JICovCi0JcHVibGljIE9iamVjdCBpbnZva2UoU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gdHlwZXMsIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQlNZXRob2QgbWV0aG9kPSBudWxsOwotCQl0cnkgewotCQkJbWV0aG9kPSBmQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QobWV0aG9kTmFtZSwgdHlwZXMpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwobWV0aG9kKTsKLQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gbWV0aG9kLmludm9rZShmSW5zdGFuY2UsIGFyZ3VtZW50cyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0Qm9vbGVhbihmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgaW50IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0SW50KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldEJvb2xlYW4oZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGludCBnZXRJbnQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRJbnQoZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcml2YXRlIEZpZWxkIGdldEZpZWxkKFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaWVsZD0gZkNsYXNzLmdldERlY2xhcmVkRmllbGQoZmllbGROYW1lKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcmV0dXJuIGZpZWxkOwotCX0KLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gZ2V0VHlwZXMoT2JqZWN0W10gb2JqZWN0cykgewotCQlpZiAob2JqZWN0cyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaW50IGxlbmd0aD0gb2JqZWN0cy5sZW5ndGg7Ci0JCUNsYXNzW10gY2xhc3Nlcz0gbmV3IENsYXNzW2xlbmd0aF07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJQXNzZXJ0LmlzTm90TnVsbChvYmplY3RzW2ldKTsKLQkJCWNsYXNzZXNbaV09IG9iamVjdHNbaV0uZ2V0Q2xhc3MoKTsKLQkJfQotCQlyZXR1cm4gY2xhc3NlczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmFpbCgpIHsKLQkJQXNzZXJ0LmlzVHJ1ZShmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTU4NWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5DaGFyU2VxdWVuY2VSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENoYXJTZXF1ZW5jZVJlYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHVibGljIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0KLQlwdWJsaWMgVGVzdENoYXJTZXF1ZW5jZVJlYWRlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlTdHJpbmcgZlN0YW5kYXJkU3RyaW5nID0gInRlc3QxMjMiOwotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkQmVnaW5uaW5nKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJ3QnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICdlJyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAncycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZE1pZGRsZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAyLCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICdzJyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAndCcpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJzEnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRFbmQoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAnMScpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJzInKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICczJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkT3V0T2ZSYW5nZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA1MCwgMyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkUGFydGlhbGx5T3V0T2ZSYW5nZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA1LCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICcyJyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnMycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJCZWdpbmluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAidGVzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyRW5kKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICIxMjMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyRW5kRW5sYXJnZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gIjEyMyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzIwMF07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmdFbmxhcmdlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAidGVzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMjAwXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJCZWdpbmluZ1JlZHVjZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCS8vd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIsIDAsIDIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQkvL30KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkvLy8gbm93IGNvbnRpbnVlIHJlYWRpbmcgc2FtZSByZWFkZXIKLQkJdGFyZ2V0U3RyaW5nID0gInMiOwotCQlzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCW5SZWFkID0gMDsKLQkJLy93aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlciwgMCwgMik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCS8vfQotCQl0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdE9iamVjdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU5M2M2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50Ow0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdE9iamVjdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotDQotCS8qKg0KLQkgKiAgDQotCSAqLw0KLQlwdWJsaWMgVGVzdE9iamVjdHMoKSB7DQotCQlzdXBlcigpOw0KLQ0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKi8NCi0JcHVibGljIFRlc3RPYmplY3RzKFN0cmluZyBuYW1lKSB7DQotCQlzdXBlcihuYW1lKTsNCi0NCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RW5kZWRGbGFnKCkgew0KLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gbmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7DQotCQlyZWdpb24uc2V0UGFyZW50RG9jdW1lbnQobmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50KCkpOw0KLQkJYm9vbGVhbiBkZWxldGVkID0gcmVnaW9uLmlzRGVsZXRlZCgpOw0KLQkJYm9vbGVhbiBlbmRlZCA9IHJlZ2lvbi5pc0VuZGVkKCk7DQotCQlyZWdpb24uc2V0RW5kZWQoIWVuZGVkKTsNCi0JCWFzc2VydEVxdWFscyghZW5kZWQsIHJlZ2lvbi5pc0VuZGVkKCkpOw0KLQkJYXNzZXJ0RXF1YWxzKGRlbGV0ZWQsIHJlZ2lvbi5pc0RlbGV0ZWQoKSk7DQotCX0NCi0NCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZWRGbGFnKCkgew0KLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gbmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7DQotCQlyZWdpb24uc2V0UGFyZW50RG9jdW1lbnQobmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50KCkpOw0KLQkJYm9vbGVhbiBkZWxldGVkID0gcmVnaW9uLmlzRGVsZXRlZCgpOw0KLQkJYm9vbGVhbiBlbmRlZCA9IHJlZ2lvbi5pc0VuZGVkKCk7DQotCQlyZWdpb24uc2V0RGVsZXRlZCghZGVsZXRlZCk7DQotCQlhc3NlcnRFcXVhbHMoIWRlbGV0ZWQsIHJlZ2lvbi5pc0RlbGV0ZWQoKSk7DQotCQlhc3NlcnRFcXVhbHMoZW5kZWQsIHJlZ2lvbi5pc0VuZGVkKCkpOw0KLQl9DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25MaXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0UmVnaW9uTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNhMzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25MaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wYXJzZXIuQ29udGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5UZXh0UmVnaW9uTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnV0aWwuQWNjZXNzb3I7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdFJlZ2lvbkxpc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUdJT05fVFlQRSA9IFRlc3RSZWdpb25MaXN0LmNsYXNzLmdldE5hbWUoKTsKLQotCi0JcHVibGljIFRlc3RSZWdpb25MaXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIFRlc3RSZWdpb25MaXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkMigpIHsKLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2FkZEFsbFRvUG9zaXRpb24oKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsMiA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYWRkZWQgPSBpbXBsMi5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFkZGVkID0gaW1wbDIuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCi0JCWFkZGVkID0gaW1wbC5hZGRBbGwoMCwgaW1wbDIpOwotCQlhc3NlcnRUcnVlKCJyZWdpb25zIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzFdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMF0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzJdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMV0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzBdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMl0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkQWxsVG9FbXB0eSgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0KLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbDIgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWFkZGVkID0gaW1wbDIuYWRkQWxsKDAsIGltcGwpOwotCQlhc3NlcnRUcnVlKCJyZWdpb25zIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzBdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMF0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzFdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMV0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzJdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMl0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfY2xlYXIoKSB7Ci0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJaW1wbC5jbGVhcigpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2dldE92ZXIoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1swXSwgaW1wbC5nZXQoMCkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMV0sIGltcGwuZ2V0KDEpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzJdLCBpbXBsLmdldCgyKSk7Ci0KLQkJQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUgPSBudWxsOwotCQl0cnkgewotCQkJaW1wbC5nZXQoaW1wbC5zaXplKCkpOwotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZTIpewotCQkJZSA9IGUyOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIm5vIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gd2hlbiBleHBlY3RlZCIsIGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfZ2V0VW5kZXIoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1swXSwgaW1wbC5nZXQoMCkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMV0sIGltcGwuZ2V0KDEpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzJdLCBpbXBsLmdldCgyKSk7Ci0KLQkJQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUgPSBudWxsOwotCQl0cnkgewotCQkJaW1wbC5nZXQoLTEpOwotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZTIpewotCQkJZSA9IGUyOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIm5vIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gd2hlbiBleHBlY3RlZCIsIGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfZ2V0KCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMF0sIGltcGwuZ2V0KDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzFdLCBpbXBsLmdldCgxKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1syXSwgaW1wbC5nZXQoMikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaW5kZXhPZigpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2lzRW1wdHkoKSB7Ci0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJaW1wbC5jbGVhcigpOwotCi0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgdHJ1ZSwgaW1wbC5pc0VtcHR5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IwKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJSXRlcmF0b3IgaXQgPSBudWxsOwotCQlhc3NlcnROb3ROdWxsKCJubyBpdGVyYXRvciByZXR1cm5lZCIsIGl0ID0gKEl0ZXJhdG9yKSBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5pbnZva2UoIml0ZXJhdG9yIiwgbmV3IE9iamVjdFswXSkpOwotCQlhc3NlcnRGYWxzZShpdC5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IxKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCi0JCUl0ZXJhdG9yIGl0ID0gbnVsbDsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gaXRlcmF0b3IgcmV0dXJuZWQiLCBpdCA9IChJdGVyYXRvcikgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuaW52b2tlKCJpdGVyYXRvciIsIG5ldyBPYmplY3RbMF0pKTsKLQkJYXNzZXJ0VHJ1ZShpdC5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IyKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCUl0ZXJhdG9yIGl0ID0gbnVsbDsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gaXRlcmF0b3IgcmV0dXJuZWQiLCBpdCA9IChJdGVyYXRvcikgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuaW52b2tlKCJpdGVyYXRvciIsIG5ldyBPYmplY3RbMF0pKTsKLQkJYXNzZXJ0VHJ1ZShpdC5oYXNOZXh0KCkpOwotCi0JCWFzc2VydE5vdE51bGwoaXQubmV4dCgpKTsKLQkJYXNzZXJ0Tm90TnVsbChpdC5uZXh0KCkpOwotCQlhc3NlcnROb3ROdWxsKGl0Lm5leHQoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoaXQuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3JlbW92ZUJ5UG9zaXRpb24oKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMCwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMF0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAxLCBpbXBsLmluZGV4T2YocmVnaW9uc1sxXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDIsIGltcGwuaW5kZXhPZihyZWdpb25zWzJdKSk7Ci0KLQkJaW1wbC5yZW1vdmUoMSk7Ci0KLQkJSXRlcmF0b3IgaXQgPSBudWxsOwotCQlhc3NlcnROb3ROdWxsKCJubyBpdGVyYXRvciByZXR1cm5lZCIsIGl0ID0gKEl0ZXJhdG9yKSBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5pbnZva2UoIml0ZXJhdG9yIiwgbmV3IE9iamVjdFswXSkpOwotCQlhc3NlcnRUcnVlKGl0Lmhhc05leHQoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKHJlZ2lvbnNbMF0sIGl0Lm5leHQoKSk7Ci0JCWFzc2VydEVxdWFscyhyZWdpb25zWzJdLCBpdC5uZXh0KCkpOwotCi0JCWFzc2VydEZhbHNlKGl0Lmhhc05leHQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9yZW1vdmVCeU9iamVjdCgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQotCQlpbXBsLnJlbW92ZShyZWdpb25zWzFdKTsKLQotCQlJdGVyYXRvciBpdCA9IG51bGw7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGl0ZXJhdG9yIHJldHVybmVkIiwgaXQgPSAoSXRlcmF0b3IpIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmludm9rZSgiaXRlcmF0b3IiLCBuZXcgT2JqZWN0WzBdKSk7Ci0JCWFzc2VydFRydWUoaXQuaGFzTmV4dCgpKTsKLQotCQlhc3NlcnRFcXVhbHMocmVnaW9uc1swXSwgaXQubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHJlZ2lvbnNbMl0sIGl0Lm5leHQoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoaXQuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3JlbW92ZUFsbCgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbDIgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWltcGwyLmFkZChyZWdpb25zWzBdKTsKLQkJaW1wbDIuYWRkKHJlZ2lvbnNbMV0pOwotCQlpbXBsMi5hZGQocmVnaW9uc1syXSk7Ci0JCWltcGwucmVtb3ZlQWxsKGltcGwyKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3NpemUoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIGltcGwuc2l6ZSgpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgaW1wbC5zaXplKCkpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMCwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMF0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAxLCBpbXBsLmluZGV4T2YocmVnaW9uc1sxXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDIsIGltcGwuaW5kZXhPZihyZWdpb25zWzJdKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBjb3VudCIsIDMsIGltcGwuc2l6ZSgpKTsKLQkJaW1wbC5yZW1vdmUocmVnaW9uc1sxXSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgY291bnQiLCAyLCBpbXBsLnNpemUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF90b0FycmF5KCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIGltcGwuc2l6ZSgpKTsKLQotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDAsIGltcGwuaW5kZXhPZihyZWdpb25zWzBdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMSwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMV0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAyLCBpbXBsLmluZGV4T2YocmVnaW9uc1syXSkpOwotCi0JCWFzc2VydFRydWUoIndyb25nIGFycmF5IiwgQXJyYXlzLmVxdWFscyhyZWdpb25zLCBpbXBsLnRvQXJyYXkoKSkpOwotCQlpbXBsLnJlbW92ZShyZWdpb25zWzFdKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgYXJyYXkiLCBBcnJheXMuZXF1YWxzKG5ldyBJVGV4dFJlZ2lvbltde3JlZ2lvbnNbMF0sIHJlZ2lvbnNbMl19LCBpbXBsLnRvQXJyYXkoKSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfdHJpbVRvU2l6ZTAoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIGltcGwuc2l6ZSgpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgaW1wbC5zaXplKCkpOwotCi0JCWltcGwuY2xlYXIoKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAwLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWltcGwudHJpbVRvU2l6ZSgpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJub3QgdHJpbW1lZCIsIDAsICgoT2JqZWN0W10pbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0KCJmUmVnaW9ucyIpKS5sZW5ndGgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0X3RyaW1Ub1NpemUxKCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIGltcGwuc2l6ZSgpKTsKLQotCQlpbXBsLnJlbW92ZSgwKTsKLQkJaW1wbC5yZW1vdmUoMCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlpbXBsLnRyaW1Ub1NpemUoKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFzc2VydEVxdWFscygibm90IHRyaW1tZWQiLCAxLCAoKE9iamVjdFtdKW5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSkubGVuZ3RoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzZlNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotCi1wdWJsaWMgY2xhc3MgTnVsbFBhcnNlciBpbXBsZW1lbnRzIFJlZ2lvblBhcnNlciB7Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBnZXREb2N1bWVudFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0UmVnaW9ucygpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUmVnaW9uUGFyc2VyIG5ld0luc3RhbmNlKCkgewotCi0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoUmVhZGVyIHJlYWRlciwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChTdHJpbmcgaW5wdXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0LCBpbnQgb2Zmc2V0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZiZmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5BYm91dFRvQmVDaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgZCA9IGV2ZW50LmdldERlbGV0ZWRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyhkLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T3JpZ2luYWxSZXF1ZXN0ZXIoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJT2JqZWN0IHIgPSBldmVudC5nZXRPcmlnaW5hbFJlcXVlc3RlcigpOwotCQlhc3NlcnRFcXVhbHModGhpcywgcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGQgPSBldmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RGVsZXRlZFRleHQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJZXZlbnQuc2V0RGVsZXRlZFRleHQoImp1bmt5Tm90aGluZyIpOwotCQkvLyBhc3N1bWUgb2sgaWYgbm8gZXhjZXB0aW9uCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBBYm91dFRvQmVDaGFuZ2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsICJ0ZXN0IiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAwOWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczMWVhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROZXdEb2N1bWVudEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdEdldE9mZnNldCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBpID0gZXZlbnQuZ2V0TGVuZ3RoKCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLmxlbmd0aCgpLCBpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRFdmVudCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJU3RyaW5nIHRleHQgPSBldmVudC5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIE5ld0RvY3VtZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBuZXcgTmV3RG9jdW1lbnRFdmVudChkb2N1bWVudCwgdGhpcyk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Tm9DaGFuZ2VFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZUV2ZW50KCkgewotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQkJYXNzZXJ0RXF1YWxzKE5vQ2hhbmdlRXZlbnQuTk9fQ09OVEVOVF9DSEFOR0UsIGV2ZW50LnJlYXNvbik7Ci0JfQotCi0JcHJpdmF0ZSBOb0NoYW5nZUV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gbmV3IE5vQ2hhbmdlRXZlbnQoZG9jdW1lbnQsIHRoaXMsICIiLCAwLCAwKTsKLQkJZXZlbnQucmVhc29uID0gTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0UmVnaW9uQ2hhbmdlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NTgxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZGVkMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1JlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1JlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFJlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE51bGwoZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpOwotCX0KLQotCXByaXZhdGUgUmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjZhNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXByaXZhdGUgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOTEwMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXhhbXBsZXMvVGVzdEF0U2lnbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0QXRTaWduIHsKLQotCXB1YmxpYyBUZXN0QXRTaWduKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7IC8vU3lzdGVtLmdldFByb3BlcnRpZXMoKTsKLQkJcHJvcGVydGllcy5wdXQoImF0IHNpZ24iLCAidGhpcyBpcyBhbiBcdTAwNDAgc2lnbiIpOwotCQlwcm9wZXJ0aWVzLmxpc3QoU3lzdGVtLm91dCk7Ci0JCUZpbGVPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJcHJvcGVydGllcy5zdG9yZShvdXRwdXRTdHJlYW0sICJ0ZXN0cyIpOwotCQlvdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJ0ZXN0QXQudHh0Iik7Ci0JCVByb3BlcnRpZXMgcmVhZFByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwotCQlyZWFkUHJvcGVydGllcy5sb2FkKGluU3RyZWFtKTsKLQkJU3RyaW5nIGF0U2lnbiA9IChTdHJpbmcpIHJlYWRQcm9wZXJ0aWVzLmdldCgiYXQgc2lnbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImF0IHNpZ24gZnJvbSByZWFkOiAiICsgYXRTaWduKTsKLQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvRW1wdHlNb2RlbEZvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZmNlYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNmY0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5Nb2RlbExpZmVjeWNsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENyZWF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG5ldyBFbXB0eU1vZGVsRm9yVGVzdHMoKTsKLQkJTW9kZWxMaWZlY3ljbGVFdmVudCBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUxFQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ESVJUWV9TVEFURSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ET0NVTUVOVF9DSEFOR0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCS8qICAgICAgICBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUlOSVRJQUxJWkVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50LkFEQVBURVJTX05PVElGSUVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTE9BREVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFU09VUkNFX0RFTEVURUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfTU9WRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgKi8KLQkJZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfU0FWRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQotCi0JCS8vIGlmIGdldHMgdG8gaGVyZSB3aXRob3V0IGV4Y2VwdGlvbiwgYXNzdW1lIG9rLgotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWZlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbW9kZWxoYW5kbGVyL01vZGVsSGFuZGxlclJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubW9kZWxoYW5kbGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBpbnQgcnVubmluZyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAibW9tZGVsSGFuZGxlclJlZ2lzdHJ5IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRSA9ICIvdGVzdC5mb28iOwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVCk7Ci0JCXN5bmNocm9uaXplZCAoUFJPSkVDVCkgewotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQkJcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVCk7Ci0JCQl9Ci0JCX0KLQkJcnVubmluZysrOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCXJ1bm5pbmctLTsKLQkJaWYgKHJ1bm5pbmcgPT0gMCkgewotCQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUKTsKLQkJCXN5bmNocm9uaXplZCAoUFJPSkVDVCkgewotCQkJCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9qZWN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICAtIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXN0YXRpYyBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEhhbmRsZSgpIHsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChQUk9KRUNUICsgRklMRSkpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXI7Ci0JCXRyeSB7Ci0JCQloYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yKGZpbGUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTW9kZWwgaGFuZGxlciBkZWZhdWx0IHNob3VsZCBub3QgYmUgbnVsbC4iLCBoYW5kbGVyKTsKLQkJCWFzc2VydEVxdWFscygiUHJvcGVyIGRlZmF1bHQgbW9kZWwgaGFuZGxlciB3YXMgbm90IHJldHVybmVkLiIsIGhhbmRsZXIuZ2V0SWQoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5tb2RlbGhhbmRsZXIiKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SGFuZGxlV2l0aERlZmF1bHQoKSB7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoUFJPSkVDVCArIEZJTEUpKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyOwotCQl0cnkgewotCQkJaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvcihmaWxlLCB0cnVlKTsKLQkJCWFzc2VydE5vdE51bGwoIk1vZGVsIGhhbmRsZXIgZGVmYXVsdCBzaG91bGQgbm90IGJlIG51bGwuIiwgaGFuZGxlcik7Ci0JCQlhc3NlcnRFcXVhbHMoIlByb3BlciBkZWZhdWx0IG1vZGVsIGhhbmRsZXIgd2FzIG5vdCByZXR1cm5lZC4iLCBoYW5kbGVyLmdldElkKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUubW9kZWxoYW5kbGVyIik7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiQ2F1Z2h0IGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEhhbmRsZVdpdGhvdXREZWZhdWx0KCkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKFBST0pFQ1QgKyBGSUxFKSk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlcjsKLQkJdHJ5IHsKLQkJCWhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3IoZmlsZSwgZmFsc2UpOwotCQkJYXNzZXJ0TnVsbCgiTW9kZWwgaGFuZGxlciBzaG91bGQgbm90IGhhdmUgcmV0dXJuZWQgYSBoYW5kbGVyLiIsIGhhbmRsZXIpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkNhdWdodCBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDIyY2JjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy50aHJlYWRpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0KLS8qKgotICogVG8gcHJpbnQgb3V0IHRpbWluZ3MsIHNldCBERUJVR19URVNUIHRvIHRydWUsIG90aGVyIHdpc2UsIHRoaXMgdGVzdCBwYXNzZXMKLSAqIGlmIG5vIGV4Y2VwdGlvbnMgdGhyb3duLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvLyBudW1iZXIgb2YgdGltZXMgYSBwYWlyIG9mIHRlc3RzICh3aXRoIGFuZCB3aXRob3V0KSB0aHJlYWQgbG9jYWwgYXJlIAotCS8vIHJlcGVhdGVkIChmb3IgbW9yZSBhY2N1cmF0ZSBhdmVyYWdlcykuCi0JaW50IG5UcmlhbHMgPSAzOwotCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZkRvY3VtZW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RFU1QgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RFU1RfREVUQUlMID0gZmFsc2U7Ci0JLy8gdGVzdHMgZnJvbSAxIHRvIE1BWF9UUkVBRFMtMSB0aHJlYWRzCi0JcHJpdmF0ZSBpbnQgTUFYX1RIUkVBRFMgPSA1OwotCXByaXZhdGUgbG9uZyBTTEVFUF9USU1FID0gMDsKLQotCXB1YmxpYyBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBnZXRDb250ZW50KCkgewotCQlyZXR1cm4gIjx0ZXN0PiIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIKLQkJCQkJKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPGV4dHJhPiA8anVuaz4gdG8gbWFrZSBhIDxsYXJnZS8+IGZpbGUgKG92ZXIgPDEwMDA+IGNoYXJzKSIgKyAiPC90ZXN0PiI7Ci0JfQotCi0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGdldERvY3VtZW50KFN0cmluZyBjb250ZW50KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoZkRvY3VtZW50ID09IG51bGwpIHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCWZEb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoInRlc3RQZXJmLnhtbCIsIGNvbnRlbnQsIG51bGwpOwotCQl9Ci0JCXJldHVybiBmRG9jdW1lbnQ7Ci0JfQotCi0Jdm9pZCBsaW5rUnVubmVyKGZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uLCBJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gZG9jdW1lbnQ7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcHJldmlvdXNEb2N1bWVudFJlZ2lvbiA9IG51bGw7Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWludCBzdGFydCA9IDA7Ci0JCWludCBsZW5ndGggPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCWludCBuUmVnaW9ucyA9IDA7Ci0JCWZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgaW5kZXggPSBpOwotCQkJaWYgKCFkaXJlY3Rpb24uYm9vbGVhblZhbHVlKCkpIHsKLQkJCQlpbmRleCA9IChsZW5ndGggLSAxKSAtIGk7Ci0JCQl9Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChpbmRleCk7Ci0JCQlpZiAoY3VycmVudERvY3VtZW50UmVnaW9uICE9IHByZXZpb3VzRG9jdW1lbnRSZWdpb24pIHsKLQkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyBuUmVnaW9ucyArICIgcmVnaW9ucyBpbiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiBtc2Vjcy4iKTsKLQkJfQotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKHRydWUpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIGxvbmcgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aG91dFRocmVhZExvY2FsKGludCBuVGhyZWFkcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VVNFX0xPQ0FMX1RIUkVBRChmYWxzZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgTk9UIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Eb2N1bWVudFdhbGtpbmcoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFRocmVhZFtuVGhyZWFkc107Ci0JCWJvb2xlYW4gdG9nZ2xlID0gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiA9IG5ldyBCb29sZWFuKHRvZ2dsZSk7Ci0JCQl0b2dnbGUgPSAhdG9nZ2xlOwotCQkJVGhyZWFkR3JvdXAgdGhyZWFkR3JvdXAgPSBuZXcgVGhyZWFkR3JvdXAoInNzZSB1bml0IHRlc3RzIik7Ci0JCQlUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCh0aHJlYWRHcm91cCwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJbGlua1J1bm5lcihkaXJlY3Rpb24sIGZEb2N1bWVudCk7Ci0JCQkJfQotCQkJfSwgKCJzc2UgdW5pdCB0ZXN0IHRocmVhZCAiICsgaSkpOwotCQkJLy8gSSB1c2VkIE1JTl9QUklPUklUWSBzaW5jZSB0aGF0IG1ha2VzIGl0IGVhc2llciB0byAic2VlIiBpbiBkZWJ1Z2dlciBsaXN0IG9mIHRocmVhZHMKLQkJCXRocmVhZC5zZXRQcmlvcml0eShUaHJlYWQuTUlOX1BSSU9SSVRZKTsKLQkJCXRocmVhZHNbaV0gPSB0aHJlYWQ7Ci0JCX0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0aHJlYWRzW2ldLnN0YXJ0KCk7Ci0JCX0KLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJCXRocmVhZHNbaV0uam9pbigpOwotCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TlRocmVhZHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmb3IgKGludCBpID0gMTsgaSA8IE1BWF9USFJFQURTOyBpKyspIHsKLQkJCWludCBuVGhyZWFkcyA9IGk7Ci0JCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA+Pj4+LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJCWZsb2F0IHdvQ3VtbSA9IDA7Ci0JCQlmbG9hdCB3Q3VtbSA9IDA7Ci0KLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJd29DdW1tID0gd29DdW1tICsgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aG91dFRocmVhZExvY2FsKG5UaHJlYWRzKTsKLQkJCQl3Q3VtbSA9IHdDdW1tICsgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aFRocmVhZExvY2FsKG5UaHJlYWRzKTsKLQkJCX0KLQkJCWZsb2F0IGF2ZXJhZ2VXTyA9IHdvQ3VtbSAvIG5UcmlhbHM7Ci0JCQlmbG9hdCBhdmVyYWdlVyA9IHdDdW1tIC8gblRyaWFsczsKLQkJCWZsb2F0IHBlclRocmVhZFdPID0gYXZlcmFnZVdPIC8gblRocmVhZHM7Ci0JCQlmbG9hdCBwZXJUaHJlYWRXID0gYXZlcmFnZVcgLyBuVGhyZWFkczsKLQkJCWludCByb3VuZGVkV08gPSBuZXcgRmxvYXQocGVyVGhyZWFkV08pLmludFZhbHVlKCk7Ci0JCQlpbnQgcm91bmRlZFcgPSBuZXcgRmxvYXQocGVyVGhyZWFkVykuaW50VmFsdWUoKTsKLQkJCWlmIChERUJVR19URVNUKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJBdmVyYWdlIHBlciB0aHJlYWQ6IHdpdGhvdXQ6ICIgKyByb3VuZGVkV08gKyAiIHdpdGg6ICIgKyByb3VuZGVkVyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgPDw8PDwtLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQl9Ci0JCS8vIGlmIGdldHMgdG8gaGVyZSAod2l0aCBubyBleGNlcHRpb25zKSBhbGwgaXMgb2suCi0JCWFzc2VydFRydWUoMCA9PSAwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5Mzk0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBzdGFydGVkIG9mZiBhcyBjb3B5IG9mIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnRzLCBhbmQgSSBqdXN0Ci0gKiBhZGRlZCBhbm90aGVyIHRocmVhZCB3aXRoIG1vZGlmaWVzIHRoZSBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8gbnVtYmVyIG9mIHRpbWVzIGEgcGFpciBvZiB0ZXN0cyAod2l0aCBhbmQgd2l0aG91dCkgdGhyZWFkIGxvY2FsIGFyZQotCS8vIHJlcGVhdGVkIChmb3IgbW9yZSBhY2N1cmF0ZSBhdmVyYWdlcykuCi0JaW50IG5UcmlhbHMgPSAzOwotCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZkRvY3VtZW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RFU1RfREVUQUlMID0gZmFsc2U7Ci0JLy8gdGVzdHMgZnJvbSAxIHRvIE1BWF9UUkVBRFMtMSB0aHJlYWRzCi0JcHJpdmF0ZSBpbnQgTUFYX1RIUkVBRFMgPSAxNDsKLQlwcml2YXRlIGxvbmcgU0xFRVBfVElNRSA9IDI7Ci0JcHJpdmF0ZSBpbnQgTl9DSEFOR0VTID0gMTAwMDA7Ci0KLQlwdWJsaWMgVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLQkJcmV0dXJuICI8dGVzdD4iICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjwvdGVzdD4iOwotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgY29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEb2N1bWVudCA9PSBudWxsKSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlmRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJ0ZXN0UGVyZi54bWwiLCBjb250ZW50LCBudWxsKTsKLQkJfQotCQlyZXR1cm4gZkRvY3VtZW50OwotCX0KLQotCXZvaWQgbGlua1J1bm5lcihmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiwgSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IGRvY3VtZW50OwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBudWxsOwotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgc3RhcnQgPSAwOwotCQlpbnQgbGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQlpbnQgblJlZ2lvbnMgPSAwOwotCQkvLyBJIG1hZGUgbGVuZ3RoICJkeW5hbWljIiBhZnRlciBhZGRpbmcgbW9kaWZpY2F0aW9uIHRocmVhZAotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJaW50IGluZGV4ID0gaTsKLQkJCWlmICghZGlyZWN0aW9uLmJvb2xlYW5WYWx1ZSgpKSB7Ci0JCQkJaW50IGN1cnJlbnRMZW5ndGggPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCQkJaW5kZXggPSAoY3VycmVudExlbmd0aCAtIDEpIC0gaTsKLQkJCX0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gY3VycmVudERvY3VtZW50UmVnaW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGluZGV4KTsKLQkJCWlmIChjdXJyZW50RG9jdW1lbnRSZWdpb24gIT0gcHJldmlvdXNEb2N1bWVudFJlZ2lvbikgewotCQkJCW5SZWdpb25zKys7Ci0JCQkJcHJldmlvdXNEb2N1bWVudFJlZ2lvbiA9IGN1cnJlbnREb2N1bWVudFJlZ2lvbjsKLQkJCX0KLQkJCVRocmVhZC55aWVsZCgpOwotCQkJdHJ5IHsKLQkJCQlUaHJlYWQuc2xlZXAoU0xFRVBfVElNRSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiAgIGZyb20gIiArIGxlbmd0aCArICIgY2hhcmFjdGVycywgZm91bmQgIiArIG5SZWdpb25zICsgIiByZWdpb25zIGluICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWNzLiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQodHJ1ZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0RvY3VtZW50V2Fsa2luZyhpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW25UaHJlYWRzXTsKLQkJYm9vbGVhbiB0b2dnbGUgPSB0cnVlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCWZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uID0gbmV3IEJvb2xlYW4odG9nZ2xlKTsKLQkJCS8vIHRvZ2dsZSBjb250cm9scyB3aGV0aGVyIG1vdmVzIGZyb20gc3RhcnQgdG8gZW5kLCBvciBlbmQgdG8gc3RhcnQKLQkJCS8vIG9mIGRvY3VtZW50LgotCQkJdG9nZ2xlID0gIXRvZ2dsZTsKLQkJCVRocmVhZEdyb3VwIHRocmVhZEdyb3VwID0gbmV3IFRocmVhZEdyb3VwKCJ1bml0IHRlc3RzIik7Ci0JCQlUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCh0aHJlYWRHcm91cCwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJbGlua1J1bm5lcihkaXJlY3Rpb24sIGZEb2N1bWVudCk7Ci0JCQkJfQotCQkJfSwgKCJzc2UgdW5pdCB0ZXN0IHRocmVhZCAiICsgaSkpOwotCQkJLy8gSSB1c2VkIE1JTl9QUklPUklUWSBzaW5jZSB0aGF0IG1ha2VzIGl0IGVhc2llciB0byAic2VlIiBpbgotCQkJLy8gZGVidWdnZXIgbGlzdCBvZiB0aHJlYWRzCi0JCQl0aHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCQl0aHJlYWRzW2ldID0gdGhyZWFkOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJdGhyZWFkc1tpXS5zdGFydCgpOwotCQl9Ci0JCS8vIG5vdyB0aGF0ICJyZWFkZXJzIiBoYXZlIHN0YXJ0ZWQsIHdlJ2xsIHN0YXJ0IGEgbW9kaWZpY2F0aW9uIHRocmVhZAotCQkvLyB0b28KLQkJVGhyZWFkIG1vZGlmeWluZ1RocmVhZCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCW1vZGlmaXlEb2N1bWVudChmRG9jdW1lbnQpOwotCQkJfQotCQl9LCAoInNzZSB1bml0IHRlc3QgbW9kaWZpY2F0aW9uIHRocmVhZCAiKSk7Ci0JCS8vIEkgdXNlZCBNQVhfUFJJT1JJVFkgdG8gYmUgc3VyZSBsb3RzIG9mIG1vZGlmaWNhdGlvbnMgdGFrZSBwbGFjZQotCQltb2RpZnlpbmdUaHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCW1vZGlmeWluZ1RocmVhZC5zdGFydCgpOwotCQl0cnkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdGhyZWFkc1tpXS5qb2luKCk7Ci0JCQl9Ci0JCQltb2RpZnlpbmdUaHJlYWQuam9pbigpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0Jdm9pZCBtb2RpZml5RG9jdW1lbnQoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IE5fQ0hBTkdFUyArIDE7IGkrKykgewotCQkJaW50IHJhbmRvbU9mZnNldCA9IHJhbmRvbS5uZXh0SW50KGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJCS8vIDEwMCBqdXN0IHNlZW1zIGxpa2UgYSBnb29kIG1heGltdW0gbGVuZ3RoIHRvIHJlcGxhY2UKLQkJCS8vIChjb3VsZCBwbGF5IHdpdGggaW4gZnV0dXJlKS4KLQkJCWludCByYW5kb21MZW5ndGggPSByYW5kb20ubmV4dEludCgxMDApOwotCQkJLy8gaWYgd2UgImFjY2lkZW50bHkiIGdldCBtb3JlIHRoYW4gdGhlIGxlbmd0aCwganVzdCBza2lwaXQKLQkJCWlmIChyYW5kb21PZmZzZXQgKyByYW5kb21MZW5ndGggPCBkb2N1bWVudC5nZXRMZW5ndGgoKSkgewotCQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIHJhbmRvbU9mZnNldCwgcmFuZG9tTGVuZ3RoLCAidGVzdGluZ3RleHQiKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROVGhyZWFkcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgewotCQkJaW50IG5UaHJlYWRzID0gaTsKLQkJCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID4+Pj4tLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQkJZmxvYXQgd0N1bW0gPSAwOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQl3Q3VtbSA9IHdDdW1tICsgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aFRocmVhZExvY2FsKG5UaHJlYWRzKTsKLQkJCX0KLQkJfQotCQkvLyBpZiBnZXRzIHRvIGhlcmUgKHdpdGggbm8gZXhjZXB0aW9ucykgYWxsIGlzIG9rLgotCQlhc3NlcnRUcnVlKDAgPT0gMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDdkMDFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEV4YW1wbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci0KLS8qKgotICogU2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL0pEQ1RlY2hUaXBzLzIwMDMvdHQxMjA4Lmh0bWwjMiBmb3IKLSAqIGluZm9ybWF0aXZlIGFydGljbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUaHJlYWRMb2NhbEV4YW1wbGUgewotCi0JLy8gQ3JlYXRlIHRocmVhZCBsb2NhbCBjbGFzcwotCS8vIEluaXRpYWwgdmFsdWUgaXMgYSByYW5kb20gbnVtYmVyIGZyb20gMC05OTkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVRocmVhZExvY2FsIGV4dGVuZHMgVGhyZWFkTG9jYWwgewotCQlwcml2YXRlIFJhbmRvbSBpbm5lclJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCQlwcm90ZWN0ZWQgT2JqZWN0IGluaXRpYWxWYWx1ZSgpIHsKLQkJCXJldHVybiBuZXcgSW50ZWdlcihpbm5lclJhbmRvbS5uZXh0SW50KDEwMDApKTsKLQkJfQotCX0KLQotCS8vIENyZWF0ZSBjbGFzcyB2YXJpYWJsZQotCXN0YXRpYyB2b2xhdGlsZSBpbnQgY291bnRlciA9IDA7Ci0KLQkvLyBEZWZpbmUvY3JlYXRlIHRocmVhZCBsb2NhbCB2YXJpYWJsZQotCXN0YXRpYyBUaHJlYWRMb2NhbCB0aHJlYWRMb2NhbCA9IG5ldyBNeVRocmVhZExvY2FsKCk7Ci0KLQkvLyBGb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCi0JLy8gc3RhdGljIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkvLyBEaXNwbGF5cyB0aHJlYWQgbG9jYWwgdmFyaWFibGUsIGNvdW50ZXIsCi0JLy8gYW5kIHRocmVhZCBuYW1lCi0Jc3RhdGljIHZvaWQgZGlzcGxheVZhbHVlcygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRocmVhZExvY2FsLmdldCgpICsgIlx0IiArIGNvdW50ZXIgKyAiXHQiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQotCQkvLyBFYWNoIHRocmVhZCBpbmNyZW1lbnRzIGNvdW50ZXIKLQkJLy8gRGlzcGxheXMgdmFyaWFibGUgaW5mbwotCQkvLyBBbmQgc2xlZXBzIGZvciB0aGUgcmFuZG9tIGFtb3VudCBvZiB0aW1lCi0JCS8vIEJlZm9yZSBkaXNwbGF5aW5nIGluZm8gYWdhaW4KLQkJUnVubmFibGUgcnVubmVyID0gbmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXN5bmNocm9uaXplZCAoVGhyZWFkTG9jYWxFeGFtcGxlLmNsYXNzKSB7Ci0JCQkJCWNvdW50ZXIrKzsKLQkJCQl9Ci0JCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCXRyeSB7Ci0JCQkJCVRocmVhZC5zbGVlcCgoKEludGVnZXIpIHRocmVhZExvY2FsLmdldCgpKS5pbnRWYWx1ZSgpKTsKLQkJCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCX0KLQkJCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBBbm90aGVyIGluc3RhbmNlIG9mIGNsYXNzIGNyZWF0ZWQKLQkJLy8gYW5kIHZhbHVlcyBkaXNwbGF5ZWQKLQkJZGlzcGxheVZhbHVlcygpOwotCi0JCS8vIEhlcmUncyB3aGVyZSB0aGUgb3RoZXIgdGhyZWFkcwotCQkvLyBhcmUgYWN0dWFsbHkgY3JlYXRlZAotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHJ1bm5lcik7Ci0JCQl0LnN0YXJ0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRocmVhZExvY2FsRXhhbXBsZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwOGY1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci0KLS8qKgotICogU2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL0pEQ1RlY2hUaXBzLzIwMDMvdHQxMjA4Lmh0bWwjMiBmb3IKLSAqIGluZm9ybWF0aXZlIGFydGljbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSB7Ci0KLQkvLyBDcmVhdGUgdGhyZWFkIGxvY2FsIGNsYXNzCi0JLy8gSW5pdGlhbCB2YWx1ZSBpcyBhIHJhbmRvbSBudW1iZXIgZnJvbSAwLTk5OQotCXByaXZhdGUgY2xhc3MgTXlUaHJlYWRMb2NhbCBleHRlbmRzIFRocmVhZExvY2FsIHsKLQkJcHJpdmF0ZSBSYW5kb20gaW5uZXJSYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkJcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKSB7Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoaW5uZXJSYW5kb20ubmV4dEludCgxMDAwKSk7Ci0JCX0KLQl9Ci0KLQkvLyBDcmVhdGUgY2xhc3MgdmFyaWFibGUKLQlzdGF0aWMgdm9sYXRpbGUgaW50IGNvdW50ZXIgPSAwOwotCi0JLy8gRGVmaW5lL2NyZWF0ZSB0aHJlYWQgbG9jYWwgdmFyaWFibGUKLQlUaHJlYWRMb2NhbCB0aHJlYWRMb2NhbCA9IG5ldyBNeVRocmVhZExvY2FsKCk7Ci0KLQkvLyBGb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCi0JLy8gc3RhdGljIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkvLyBEaXNwbGF5cyB0aHJlYWQgbG9jYWwgdmFyaWFibGUsIGNvdW50ZXIsCi0JLy8gYW5kIHRocmVhZCBuYW1lCi0Jdm9pZCBkaXNwbGF5VmFsdWVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGhyZWFkTG9jYWwuZ2V0KCkgKyAiXHQiICsgY291bnRlciArICJcdCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCQluZXcgVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUoKS5zdGFydFJ1bigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdGFydFJ1bigpIHsKLQotCQkvLyBFYWNoIHRocmVhZCBpbmNyZW1lbnRzIGNvdW50ZXIKLQkJLy8gRGlzcGxheXMgdmFyaWFibGUgaW5mbwotCQkvLyBBbmQgc2xlZXBzIGZvciB0aGUgcmFuZG9tIGFtb3VudCBvZiB0aW1lCi0JCS8vIEJlZm9yZSBkaXNwbGF5aW5nIGluZm8gYWdhaW4KLQkJUnVubmFibGUgcnVubmVyID0gbmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCQljb3VudGVyKys7Ci0JCQkJfQotCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl0cnkgewotCQkJCQlUaHJlYWQuc2xlZXAoKChJbnRlZ2VyKSB0aHJlYWRMb2NhbC5nZXQoKSkuaW50VmFsdWUoKSk7Ci0JCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0KLQkJLy8gQW5vdGhlciBpbnN0YW5jZSBvZiBjbGFzcyBjcmVhdGVkCi0JCS8vIGFuZCB2YWx1ZXMgZGlzcGxheWVkCi0JCWRpc3BsYXlWYWx1ZXMoKTsKLQotCQkvLyBIZXJlJ3Mgd2hlcmUgdGhlIG90aGVyIHRocmVhZHMKLQkJLy8gYXJlIGFjdHVhbGx5IGNyZWF0ZWQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCVRocmVhZCB0ID0gbmV3IFRocmVhZChydW5uZXIpOwotCQkJdC5zdGFydCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9BY2Nlc3Nvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2ZiY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3V0aWwvQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy51dGlsOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3IgYWNjZXNzaW5nIGNsYXNzZXMgYW5kIG1lbWJlcnMgd2hpY2ggY2Fubm90Ci0gKiBiZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBKYXZhIGFjY2VzcyBjb250cm9sIGxpa2UgcHJpdmF0ZQotICogb3IgcGFja2FnZSB2aXNpYmxlIGVsZW1lbnRzLgotICoKLSAqIEBzaW5jZSAzLjEKLSAqLwotcHVibGljIGNsYXNzIEFjY2Vzc29yIHsKLQotCS8qKiBUaGUgY2xhc3MgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgQ2xhc3MgZkNsYXNzOwotCS8qKiBUaGUgaW5zdGFuY2UgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgT2JqZWN0IGZJbnN0YW5jZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBDbGFzcyBjbGF6eikgewotCQlvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhenopOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQlmQ2xhc3M9IGNsYXp6OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCUFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTmFtZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NMb2FkZXIpOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgdGhleSBtdXN0IGFsbCBiZSBpbnN0YW5jZW9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNBY2Nlc3NvcihTdHJpbmcsIENsYXNzTG9hZGVyLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRoaXMoY2xhc3NOYW1lLCBjbGFzc0xvYWRlciwgZ2V0VHlwZXMoY29uc3RydWN0b3JBcmdzKSwgY29uc3RydWN0b3JBcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JUeXBlcyB0aGUgdHlwZXMgb2YgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgQ2xhc3NbXSBjb25zdHJ1Y3RvclR5cGVzLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQ29uc3RydWN0b3IgY29uc3RydWN0b3I9IG51bGw7Ci0JCXRyeSB7Ci0JCQljb25zdHJ1Y3Rvcj0gZkNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3JUeXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwoY29uc3RydWN0b3IpOwotCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJZkluc3RhbmNlPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShjb25zdHJ1Y3RvckFyZ3MpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB0byBhY2Nlc3Mgc3RhdGljIHN0dWZmLgotCSAqIDwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyBhbGwgdGhvc2UgYXJndW1lbnRzIG11c3QgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI2ludm9rZShTdHJpbmcsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCXJldHVybiBpbnZva2UobWV0aG9kTmFtZSwgZ2V0VHlwZXMoYXJndW1lbnRzKSwgYXJndW1lbnRzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSB0eXBlcyB0aGUgYXJndW1lbnQgdHlwZXMKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzCi0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHR5cGVzLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJTWV0aG9kIG1ldGhvZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1ldGhvZD0gZkNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIHR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJcmV0dXJuIG1ldGhvZC5pbnZva2UoZkluc3RhbmNlLCBhcmd1bWVudHMpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIE9iamVjdCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEJvb2xlYW4oZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGludCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEludChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRCb29sZWFuKGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SW50KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0SW50KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpdmF0ZSBGaWVsZCBnZXRGaWVsZChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBudWxsOwotCQl0cnkgewotCQkJZmllbGQ9IGZDbGFzcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXJldHVybiBmaWVsZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGdldFR5cGVzKE9iamVjdFtdIG9iamVjdHMpIHsKLQkJaWYgKG9iamVjdHMgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWludCBsZW5ndGg9IG9iamVjdHMubGVuZ3RoOwotCQlDbGFzc1tdIGNsYXNzZXM9IG5ldyBDbGFzc1tsZW5ndGhdOwotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCUFzc2VydC5pc05vdE51bGwob2JqZWN0c1tpXSk7Ci0JCQljbGFzc2VzW2ldPSBvYmplY3RzW2ldLmdldENsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIGNsYXNzZXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZhaWwoKSB7Ci0JCUFzc2VydC5pc1RydWUoZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3V0aWwvVGVzdEphclV0aWxpdGllcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9UZXN0SmFyVXRpbGl0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTVkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9UZXN0SmFyVXRpbGl0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkphclV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuU1NFTW9kZWxUZXN0c1BsdWdpbjsKLQotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5KYXJVdGlsaXRpZXMKLSAqLwotcHVibGljIGNsYXNzIFRlc3RKYXJVdGlsaXRpZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBmRXhwZWN0ZWROYW1lcyA9IG5ldyBTdHJpbmdbXXsiLnByb2plY3QiLCAiYWJvdXQuaHRtbCIsICJidWlsZC5wcm9wZXJ0aWVzIiwgInBsdWdpbi5wcm9wZXJ0aWVzIiwgInRlc3QueG1sIn07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfSkFSX1VUSUxJVElFU19QUk9KRUNUID0gIlRlc3RKYXJVdGlsaXRpZXMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0pBUl9VVElMSVRJRVNfVEVTVEZJTEVfSkFSID0gInRlc3RmaWxlLmphciI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RGSUxFX0JVTkRMRV9FTlRSWSA9ICJyZXNvdXJjZXMvdGVzdGZpbGUuamFyIjsKLQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChmdWxsUGF0aCk7Ci0JCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJaW50IGkgPSAtMTsKLQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQl9Ci0JCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiY2FuJ3QgZmluZCAiICsgZW50cnluYW1lKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJdHJ5IHsKLQkJCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBTU0VNb2RlbFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbnVsbCwgZSkpOwotCQkJCX0KLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgLSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlzdGF0aWMgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyBUZXN0SmFyVXRpbGl0aWVzKCkgewotCQlzdXBlcigiSmFyVXRpbGl0aWVzIFRlc3RzIik7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcmVhZENvbnRlbnRzKElucHV0U3RyZWFtIGlzKSB7Ci0JCVN0cmluZyBjaGFyc2V0ID0gImlzby04ODU5LTEiOwotCi0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlSZWFkZXIgcmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcywgY2hhcnNldCk7Ci0JCQljaGFyW10gcmVhZEJ1ZmZlciA9IG5ldyBjaGFyWzIwNDhdOwotCQkJaW50IG4gPSByZWFkZXIucmVhZChyZWFkQnVmZmVyKTsKLQkJCXdoaWxlIChuID4gMCkgewotCQkJCXMuYXBwZW5kKHJlYWRCdWZmZXIsIDAsIG4pOwotCQkJCW4gPSByZWFkZXIucmVhZChyZWFkQnVmZmVyKTsKLQkJCX0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpZiAoaXMgIT0gbnVsbCkgewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0KLQkJCQlpZiAocmVhZGVyICE9IG51bGwpCi0JCQkJCXJlYWRlci5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gbm90aGluZyB0byBkbwotCQkJfQotCQl9Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChnZXROYW1lKCkpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7Ci0JCQljb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFRFU1RGSUxFX0JVTkRMRV9FTlRSWSwgZ2V0SmFyRmlsZSgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldEphckZpbGUoKSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsKLQkJcmV0dXJuIHByb2plY3QuZ2V0RmlsZShURVNUX0pBUl9VVElMSVRJRVNfVEVTVEZJTEVfSkFSKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbnRyeUNvdW50RnJvbUZpbGVzeXN0ZW0oKSB7Ci0JCVN0cmluZ1tdIGVudHJ5TmFtZXMgPSBKYXJVdGlsaXRpZXMuZ2V0RW50cnlOYW1lcyhnZXRKYXJGaWxlKCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbmNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMiLCA1LCBlbnRyeU5hbWVzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudHJ5Q291bnRGcm9tTWlzc2luZ0ZpbGUoKSB7Ci0JCVN0cmluZ1tdIG5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoVEVTVF9KQVJfVVRJTElUSUVTX1BST0pFQ1QgKyAiL25vbmV4aXN0ZW50LmphciIpOwotCQlhc3NlcnROb3ROdWxsKCJudWxsIG5hbWVzIiwgbmFtZXMpOwotCQlhc3NlcnRFcXVhbHMoImVudHJpZXMgcmV0dXJuZWQgZm9yIG1pc3NpbmcgZmlsZSIsIDAsIG5hbWVzLmxlbmd0aCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlDb3VudEZyb21Xb3Jrc3BhY2UoKSB7Ci0JCVN0cmluZ1tdIGVudHJ5TmFtZXMgPSBKYXJVdGlsaXRpZXMuZ2V0RW50cnlOYW1lcyhnZXRKYXJGaWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImluY29ycmVjdCBudW1iZXIgb2YgZW50cmllcyIsIDUsIGVudHJ5TmFtZXMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlDb3VudFdpdGhEaXJlY3Rvcmllc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoImluY29ycmVjdCBudW1iZXIgb2YgZW50cmllcyIsIDYsIGVudHJ5TmFtZXMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlOYW1lc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0JCUNvbGxlY3Rpb24gbmFtZXMgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZW50cnlOYW1lcykpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZkV4cGVjdGVkTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoIm1pc3NpbmcgbmFtZSBvZiBlbnRyeTogIiArIGZFeHBlY3RlZE5hbWVzW2ldLCBuYW1lcy5jb250YWlucyhmRXhwZWN0ZWROYW1lc1tpXSkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudHJ5TmFtZXNGcm9tV29ya3NwYWNlKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpKTsKLQkJQ29sbGVjdGlvbiBuYW1lcyA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChlbnRyeU5hbWVzKSk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRXhwZWN0ZWROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZSgibWlzc2luZyBuYW1lIG9mIGVudHJ5OiAiICsgZkV4cGVjdGVkTmFtZXNbaV0sIG5hbWVzLmNvbnRhaW5zKGZFeHBlY3RlZE5hbWVzW2ldKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlOYW1lc1dpdGhEaXJlY3Rvcmllc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgZmFsc2UpOwotCQlDb2xsZWN0aW9uIG5hbWVzID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KGVudHJ5TmFtZXMpKTsKLQotCQlTdHJpbmdbXSBleHBlY3RlZE5hbWVzID0gbmV3IFN0cmluZ1tdeyIucHJvamVjdCIsICJhYm91dC5odG1sIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAicGx1Z2luLnByb3BlcnRpZXMiLCAidGVzdC54bWwifTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRUcnVlKCJtaXNzaW5nIG5hbWUgb2YgZW50cnk6ICIgKyBlbnRyeU5hbWVzW2ldLCBuYW1lcy5jb250YWlucyhlbnRyeU5hbWVzW2ldKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgibWlzc2luZyBuYW1lIG9mIGZvbGRlciBlbnRyeTogZW1wdHkvIiwgbmFtZXMuY29udGFpbnMoImVtcHR5LyIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmcgbG9jYXRpb24gPSBnZXRKYXJGaWxlKCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoSmFyVXRpbGl0aWVzLmdldElucHV0U3RyZWFtKGxvY2F0aW9uLCAicGx1Z2luLnByb3BlcnRpZXMiKSk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnRzIGxvYWRlZCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgibm90IGVub3VnaCBjb250ZW50cyByZWFkIiwgY29udGVudHMubGVuZ3RoKCkgPiA0MCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIgKyBjb250ZW50cy5zdWJzdHJpbmcoMCwgNDApLCBjb250ZW50cy5zdGFydHNXaXRoKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21NaXNzaW5nRmlsZSgpIHsKLQkJSW5wdXRTdHJlYW0gY29udGVudHMgPSBKYXJVdGlsaXRpZXMuZ2V0SW5wdXRTdHJlYW0oVEVTVF9KQVJfVVRJTElUSUVTX1BST0pFQ1QgKyAiL25vbmV4aXN0ZW50LmphciIsICJwbHVnaW4ucHJvcGVydGllcyIpOwotCQlhc3NlcnROdWxsKCJjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlYWRGcm9tU3VwcG9ydGVkVVJMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IGdldEphckZpbGUoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IHJlYWRDb250ZW50cyhKYXJVdGlsaXRpZXMuZ2V0SW5wdXRTdHJlYW0obmV3IFVSTCgiamFyOmZpbGU6IiArIGxvY2F0aW9uICsgIiEvcGx1Z2luLnByb3BlcnRpZXMiKSkpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoIm5vdCBlbm91Z2ggY29udGVudHMgcmVhZCIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIsIGNvbnRlbnRzLnN0YXJ0c1dpdGgoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlYWRGcm9tVW5zdXBwb3J0ZWRVUkwoKSB7Ci0JCVVSTCBlbnRyeSA9IFNTRU1vZGVsVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJhYm91dC5odG1sIik7Ci0JCWFzc2VydE5vdE51bGwoIm51bGwgVVJMIHRvIGFib3V0Lmh0bWwiLCBlbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gSmFyVXRpbGl0aWVzLmdldElucHV0U3RyZWFtKGVudHJ5KTsKLQkJYXNzZXJ0Tm90TnVsbCgibnVsbCBpbnB1dCBzdHJlYW0gdG8gIitlbnRyeSwgaW5wdXRTdHJlYW0pOwotCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoaW5wdXRTdHJlYW0pOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoIm5vdCBlbm91Z2ggY29udGVudHMgcmVhZC4gQ29udGVudHMgTGVuZ3RoIHdhcyAiICsgY29udGVudHMubGVuZ3RoKCkgKyAiIGJ1dCBleHBlY3RlZCBtb3JlIHRoYW4gNzUwLiIsIGNvbnRlbnRzLmxlbmd0aCgpID4gNzUwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiArIGNvbnRlbnRzLnN1YnN0cmluZygwLCA3NSksIGNvbnRlbnRzLmluZGV4T2YoIkRPQ1RZUEUiKSA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbVdvcmtzcGFjZSgpIHsKLQkJSVJlc291cmNlIGphciA9IGdldEphckZpbGUoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gcmVhZENvbnRlbnRzKEphclV0aWxpdGllcy5nZXRJbnB1dFN0cmVhbShqYXIsICJwbHVnaW4ucHJvcGVydGllcyIpKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudHMgbG9hZGVkIiwgY29udGVudHMpOwotCQlhc3NlcnRUcnVlKCJub3QgZW5vdWdoIGNvbnRlbnRzIHJlYWQiLCBjb250ZW50cy5sZW5ndGgoKSA+IDQwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiArIGNvbnRlbnRzLnN1YnN0cmluZygwLCA0MCksIGNvbnRlbnRzLnN0YXJ0c1dpdGgoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTNlNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0KLSAgICA8IS0tIAotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlLgotICAgICAgICAgKGlmIHRoZXJlIGlzLCBsZXQgdXMga25vdyBpZiB0aGUgc2NyaXB0IGNhbiBiZSBpbXByb3ZlZC4pCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAtLT4KLSAgICAKLSAgICA8IS0tIAotICAgICAgICAgRXZlcnkgc3VpdGUgbmVlZHMgdG8gc3BlY2lmeSB0aHJlZSB0aGluZzogCi0gICAgICAgICAgICAgcGx1Z2luLW5hbWUsIAotICAgICAgICAgICAgIGNsYXNzbmFtZSAtIHRoYXQgcHJvdmlkZXMgdGhlIHN1aXRlIHRvIHRlc3QsIGFuZCAKLSAgICAgICAgICAgICB0ZXN0VHlwZSAtIGVpdGhlciBjb3JlLXRlc3QsIG9yIHVpLXRlc3QuIAotICAgICAgICAgVGhlcmUgaXMgYW4gb3B0aW9uYWwgZXh0cmFWTWFyZ3MgcHJvcGVydHkgdGhhdCBzb21lIHRlc3RzIG5lZWQgdG8gdXNlIGluIG9yZGVyIHRvIHNwZWNpZnkgIAotICAgICAgICAgZXh0cmEsIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIHRvIHRoZSBWTSB3aGVuIGl0IHJ1bnMuIElmIG5vdCBuZWVkLCBubyBuZWVkIHRvIHNwZWNpZnkgaXQuIAotICAgIC0tPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLSAgICAKLSAgICA8IS0tIHNvbWUgdGVzdCBzdWl0ZXMgbmVlZCB0byBhZGQgc3BlY2lhbCB2bSBhcmd1bWVudHMgd2hlbiB0aGV5IHJ1bi4gVGhpcyBpcyBqdXN0IGFuIGV4YW1wbGUuCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImV4dHJhVk1hcmdzIgotICAgICAgICB2YWx1ZT0iLURqc2ZSdW50aW1lSmFyc0RpcmVjdG9yeVYxLjE9JHt0ZXN0RGlyfS8ke2pzZjEuMURpcn0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iZXh0cmFWTWFyZ3MgJHtleHRyYVZNYXJnc30iIC8+Ci0gICAgLS0+Ci0KLSAgICA8IS0tIAotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93LgotICAgICAgICAgKGlmIHRoZXJlIGlzLCBsZXQgdXMga25vdyBpZiB0aGUgc2NyaXB0IGNhbiBiZSBpbXByb3ZlZC4pCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAtLT4KLSAgICAKLSAgICA8IS0tIAotICAgICAgICAgVGhlcmUgYXJlIHNvbWUgcHJvcGVydGllcyB0aGF0IG11c3QgYmUgcHJvdmlkZWQgYnkgY2FsbGVyLiAKLSAgICAtLT4KLSAgICA8ZmFpbAotICAgICAgICBtZXNzYWdlPSJFcnJvcjogbWlzc2luZyBwcm9wZXJ0eS4gZWNsaXBzZS1ob21lIG11c3QgYmUgcHJvdmlkZWQiCi0gICAgICAgIHVubGVzcz0iZWNsaXBzZS1ob21lIiAvPgotICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBidWlsZERpcmVjdG9yeSBtdXN0IGJlIHByb3ZpZGVkIgotICAgICAgICB1bmxlc3M9ImJ1aWxkRGlyZWN0b3J5IiAvPgotICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBidWlsZExhYmVsIG11c3QgYmUgcHJvdmlkZWQiCi0gICAgICAgIHVubGVzcz0iYnVpbGRMYWJlbCIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0KLSAgICAgIDwhLS0gCi0gICAgVGhpcyBpbml0IHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yCi0gICAgICBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cwotICAgICAgc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIEhlcmUgaXQncyBhIGdvb2QgaWRlYSAKLSAgICB0byBkZWxldGUgdGhpbmdzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGNyZWF0ZWQgaWYgdGhlIHRlc3QgaGFzIGFscmVhZHkgYmVlbiAKLSAgICByYW4sIGp1c3QgaW4gY2FzZSB0aGUgdGVzdCBpcyBiZWluZyByZS1yYW4uIAotICAgIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICAKLSAgICAgICAgICAgIDwhLS0gCi0gICAgICAgICBtYWtlIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQKLSAgICAgICAgIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLCBpZiBpdCBkb2VzIGV4aXN0Ci0gICAgICAgIC0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotICAgICAgICA8bWtkaXIKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSAKLSAgICAgIFRoaXMgc3VpdGUgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uCi0gICAgLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJzdWl0ZSI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotICAgIDwvdGFyZ2V0PgotCi0gICAgIDwhLS0gCi0gICAgIFRoaXMgY2xlYW4gdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlcgotICAgICBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIAotICAgICBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQsIGlmIHJlcXVpcmVkLiBCdXQsIAotICAgICBpdCdzIHVzdWFsbHkgYmVzdCB0byBsZWF2ZSBpdCBhbGwsIGluIGNhc2UgeW91J2QgbGlrZSB0byBpbnNwZWN0IGl0IAotICAgICBhZnRlciBhIGZhaWxlZCBydW4uIEl0IHdpbGwgYmUgZGVsZXRlZCBldmVudHVhbGx5IGJ5IHRoZSBuZXh0IGNsZWFuIGJ1aWxkLiAKLSAgICAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9ImNsZWFudXAiPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIAotICAgICAgIFRoaXMgcnVuIHRhcmdldCBpcyB0aGUgbWFzdGVyIHRhcmdldCB0aGF0IGdldCdzIGFsbCB0aGUgd29yayBkb25lLiAKLSAgICAgICBNb3N0IGFjdGl2aXR5IGlzIGFjdHVhbGx5IGRvbmUgaW4gdGhlICdkZXBlbmRzJyB0YXNrcywgYnV0IGFueSAKLSAgICAgICBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIAotICAgICAgIHNob3VsZCBnbyBoZXJlLCBzdWNoIGFzIGNvcHlpbmcgdGhlIHJlc3VsdHMgdG8gYSBjb21tb24gJ3NhdmUnIAotICAgICAgIGRpcmVjdG9yeS4gCi0gICAgLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTZlMmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImpmYWNlLnRleHQudGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXh0LnRlc3RzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZmM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotc3NlZWRpdG9ydGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuc3NlZWRpdG9ydGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA3MmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM2NjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHNzZWVkaXRvcnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5TU0VUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUsCi0gY29tLmlibS5pY3UKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MmZlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlZWRpdG9ydGVzdHMuamFyID0gc3JjLyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamZhY2UudGV4dC50ZXN0cy8sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudGVzdHMvCi1vdXRwdXQuc3NlZWRpdG9ydGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzc2VlZGl0b3J0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ2ZTM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBDaHJpc3RpYW4gUGxlc25lciBIYW5zZW4gKHBsZXNuZXJAcXVlbnRhLm9yZykgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5GYXN0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5TaW5nbGVMaW5lUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklDaGFyYWN0ZXJQYWlyTWF0Y2hlcjsKLQotLyoqCi0gKiBHZW5lcmljIHRlc3Qgb2Ygc2ltcGxlIGNoYXJhY3RlciBwYWlyIG1hdGNoZXJzCi0gKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IGNoYXJhY3RlciBwYWlyIG1hdGNoZXIuCi0JICogCi0JICogQHBhcmFtIGNoYXJzIHRoZSBjaGFyYWN0ZXJzIHRvIG1hdGNoCi0JICogQHJldHVybiB0aGUgY2hhcmFjdGVyIHBhaXIgbWF0Y2hlcgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgY3JlYXRlTWF0Y2hlcihmaW5hbCBTdHJpbmcgY2hhcnMpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFydGl0aW9uaW5nIHRyZWF0ZWQgYnkgdGhlIG1hdGNoZXIuCi0JICogCi0JICogQHJldHVybiB0aGUgcGFydGl0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREb2N1bWVudFBhcnRpdGlvbmluZygpOwotCi0JcHVibGljIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKiAtLS0gVCBlIHMgdCBzIC0tLSAqLwotCi0JLyoqIFRlc3RzIHRoYXQgdGhlIHRlc3QgY2FzZSByZWFkZXIgd29ya3MgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGVzdENhc2VSZWFkZXIoKSB7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIjKCApJSIsIDMsICAwLCAgIiggKSIpOwotCQlwZXJmb3JtUmVhZGVyVGVzdCgiJSggKSMiLCAwLCAgMywgICIoICkiKTsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiggKSUiLCAgMywgIC0xLCAiKCApIik7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIjJSIsICAgIDAsICAwLCAgIiIpOwotCX0KLQotCS8qKgotCSAqIFZlcnkgc2ltcGxlIGNoZWNrcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZU1hdGNoU2FtZU1hdGNoZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIyggICApJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiNbICAgXSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjeyAgIH0lIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgICApIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIlslICAgXSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ7JSAgIH0jIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFZlcnkgc2ltcGxlIGNoZWNrcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZU1hdGNoRGlmZmVyZW50TWF0Y2hlcnMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIjKCAgICklIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiNbICAgXSUiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiI3sgICB9JSIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIoJSAgICkjIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIlslICAgXSMiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAieyUgICB9IyIpOwotCX0KLQotCS8qKgotCSAqIENsb3NlIG1hdGNoZXMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9zZU1hdGNoZXMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIygpJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCgpKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSgpKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoKCUpIykiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoIygpJSkiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDaGVja3Mgb2Ygc2ltcGxlIHNpdHVhdGlvbnMgd2hlcmUgbm8gbWF0Y2hlcyBzaG91bGQgYmUgZm91bmQuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlTWF0Y2goKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiJSggICkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoICUgKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiggICUpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiJSIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgaXQgZG9lc24ndCBtYXRjaCBhY3Jvc3MgZGlmZmVyZW50IHBhcnRpdGlvbnMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQYXJ0aXRpb25lZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSB8YSBhfCApIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoIHxhIGF8ICklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGIgIyggKSUgYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoIHxiICklIGJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGIgKSBifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhICggYXwgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSAoJSBhfCApIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMgIyggY3wgKSAoIHxjICklIGN8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMgKCUgY3wgKSAoIHxjICkjIGN8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGEgKSBhfCB8YiApIGJ8IHxjICkgY3wgKSMiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGF0IGl0IHdvcmtzIHByb3Blcmx5IG5leHQgdG8gcGFydGl0aW9uIGJvdW5kYXJpZXMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUaWdodFBhcnRpdGlvbmVkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIih8YiklYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJXxiKWJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEoYXwpJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhKCVhfCkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyMoY3wpKHxjKSVjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjKCVjfCkofGMpI2N8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCV8YSlhfHxiKWJ8fGMpY3wpIyIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKiogVGVzdCB0aGF0IG5lc3Rpbmcgd29ya3MgcHJvcGVybHkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TmVzdGluZygpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICMoICggKCApICkgKCApICklICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCUgKCAoICkgKSAoICkgKSMgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAjKCB7ICggKSB9IFsgXSApJSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICglIHsgKCApIH0gWyBdICkjICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCAjeyAoICkgfSUgWyBdICkgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoIHslICggKSB9IyBbIF0gKSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiMoYyhkKGUpZilnKGgpaSklailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKCVjKGQoZSlmKWcoaClpKSNqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIjKGN7ZChlKWZ9Z1toXWkpJWopayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiglY3tkKGUpZn1nW2hdaSkjailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKGMje2QoZSlmfSVnW2hdaSlqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoY3slZChlKWZ9I2dbaF1pKWopayIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGEgZmV3IGJvdW5kYXJ5IGNvbmRpdGlvbnMuCi0JICogCi0JICogKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJvdW5kYXJpZXMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCWZpbmFsIFN0cmluZ0RvY3VtZW50IGRvYz0gbmV3IFN0cmluZ0RvY3VtZW50KCJhYmNkZWZnaGlqa2wiKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKG51bGwsIDApKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKGRvYywgLTEpKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKGRvYywgZG9jLmdldExlbmd0aCgpICsgMSkpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTU2NDI2KCkgewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9PD4iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgIyggYSA8IGIgKSUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICglIGEgPCBiICkjICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAjKCBhID4gYiApJSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCUgYSA+IGIgKSMgIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qIC0tLSBVIHQgaSBsIGkgdCBpIGUgcyAtLS0gKi8KLQotCS8qKgotCSAqIENoZWNrcyB0aGF0IHRoZSB0ZXN0IGNhc2UgcmVhZGVyIHJlYWRzIHRoZSB0ZXN0IGNhc2UgYXMgc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSB0ZXN0U3RyaW5nIHRoZSBzdHJpbmcgdG8gdGVzdAotCSAqIEBwYXJhbSBleHBlY3RlZFBvcyB0aGUgZXhwZWN0ZWQgcG9zaXRpb24KLQkgKiBAcGFyYW0gZXhwZWN0ZWRNYXRjaCB0aGUgZXhwZWN0ZWQgbWF0Y2gKLQkgKiBAcGFyYW0gZXhwZWN0ZWRTdHJpbmcgdGhlIGV4cGVjdGVkIHN0cmluZwotCSAqLwotCXByaXZhdGUgdm9pZCBwZXJmb3JtUmVhZGVyVGVzdChTdHJpbmcgdGVzdFN0cmluZywgaW50IGV4cGVjdGVkUG9zLCBpbnQgZXhwZWN0ZWRNYXRjaCwgU3RyaW5nIGV4cGVjdGVkU3RyaW5nKSB7Ci0JCVRlc3RDYXNlIHQwPSBjcmVhdGVUZXN0Q2FzZSh0ZXN0U3RyaW5nKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUG9zLCB0MC5mUG9zKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTWF0Y2gsIHQwLmZNYXRjaCk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgdDAuZlN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHRoYXQgdGhlIGdpdmVuIG1hdGNoZXIgbWF0Y2hlcyB0aGUgaW5wdXQgYXMgc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSBtYXRjaGVyIHRoZSBtYXRjaGVyCi0JICogQHBhcmFtIHRlc3RDYXNlIHRoZSB0ZXN0IHN0cmluZwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1NYXRjaChmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlciwgZmluYWwgU3RyaW5nIHRlc3RDYXNlKSB7Ci0JCWZpbmFsIFRlc3RDYXNlIHRlc3Q9IGNyZWF0ZVRlc3RDYXNlKHRlc3RDYXNlKTsKLQkJbWF0Y2hlci5jbGVhcigpOwotCQlmaW5hbCBJUmVnaW9uIHJlZ2lvbj0gbWF0Y2hlci5tYXRjaCh0ZXN0LmdldERvY3VtZW50KCksIHRlc3QuZlBvcyk7Ci0JCWlmICh0ZXN0LmZNYXRjaCA9PSAtMSkgewotCQkJLy8gaWYgbm8gbWF0Y2ggcG9pbnQgaGFzIGJlZW4gc3BlY2lmaWVkIHRoZXJlIHNob3VsZCBiZQotCQkJLy8gbm8gbWF0Y2gKLQkJCWlmIChyZWdpb24gIT0gbnVsbCkgU3lzdGVtLm91dC5wcmludGxuKHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCQlhc3NlcnROdWxsKHJlZ2lvbik7Ci0JCX0gZWxzZSB7Ci0JCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0JCQlmaW5hbCBib29sZWFuIGlzRm9yd2FyZD0gdGVzdC5mUG9zID4gdGVzdC5mTWF0Y2g7Ci0JCQlhc3NlcnRFcXVhbHMoaXNGb3J3YXJkLCBtYXRjaGVyLmdldEFuY2hvcigpID09IElDaGFyYWN0ZXJQYWlyTWF0Y2hlci5SSUdIVCk7Ci0JCQkvLyBJZiB0aGUgbWF0Y2ggaXMgZm9yd2FyZCwgdGhlIGN1cnNlciBpcyBvbmUgY2hhcmFjdGVyCi0JCQkvLyBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLCBzbyB3ZSBuZWVkIHRvIGNvdW50IG9uZQotCQkJLy8gc3RlcCBiYWNrd2FyZHMKLQkJCWZpbmFsIGludCBvZmZzZXQ9IGlzRm9yd2FyZCA/IHRlc3QuZ2V0T2Zmc2V0KCkgOiB0ZXN0LmdldE9mZnNldCgpIC0gMTsKLQkJCWZpbmFsIGludCBsZW5ndGg9IGlzRm9yd2FyZCA/IHRlc3QuZ2V0TGVuZ3RoKCkgOiB0ZXN0LmdldExlbmd0aCgpICsgMTsKLQkJCWFzc2VydEVxdWFscyhsZW5ndGgsIHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnRFcXVhbHMob2Zmc2V0LCByZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1NYXRjaChmaW5hbCBTdHJpbmcgZGVsaW1zLCBmaW5hbCBTdHJpbmcgdGVzdENhc2UpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoZGVsaW1zKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsIHRlc3RDYXNlKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRleHQgY2FzZSBmcm9tIGEgc3RyaW5nLiBJbiB0aGUgZ2l2ZW4gc3RyaW5nIGEgJyUnIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIG9mIHRoZQotCSAqIGN1cnNvciBhbmQgYSAnIycgcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgdGhlIGV4cGVjdGVkIG1hdGNoaW5nIGNoYXJhY3Rlci4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGVzdCBjYXNlCi0JICogQHJldHVybiB0aGUgY3JlYXRlZCB0ZXN0IGNhc2UKLQkgKi8KLQlwdWJsaWMgVGVzdENhc2UgY3JlYXRlVGVzdENhc2UoU3RyaW5nIHN0cikgewotCQlpbnQgcG9zPSBzdHIuaW5kZXhPZigiJSIpOwotCQlhc3NlcnRGYWxzZShwb3MgPT0gLTEpOwotCQlpbnQgbWF0Y2g9IHN0ci5pbmRleE9mKCIjIik7Ci0JCS8vIGFjY291bnQgZm9yIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHBvc2l0aW9uIG1hcmtlciwKLQkJLy8gaWYgdGhlcmUgaXMgb25lCi0JCWlmIChtYXRjaCAhPSAtMSAmJiBtYXRjaCA8IHBvcykgcG9zIC09IDE7Ci0JCWlmIChwb3MgPCBtYXRjaCkgbWF0Y2ggLT0gMTsKLQkJZmluYWwgU3RyaW5nIHN0cmlwcGVkPSBzdHIucmVwbGFjZUFsbCgiJSIsICIiKS5yZXBsYWNlQWxsKCIjIiwgIiIpOwotCQlyZXR1cm4gbmV3IFRlc3RDYXNlKHN0cmlwcGVkLCBwb3MsIG1hdGNoKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFRlc3RDYXNlIHsKLQotCQlwdWJsaWMgZmluYWwgU3RyaW5nIGZTdHJpbmc7Ci0JCXB1YmxpYyBmaW5hbCBpbnQgZlBvcywgZk1hdGNoOwotCi0JCXB1YmxpYyBUZXN0Q2FzZShTdHJpbmcgc3RyaW5nLCBpbnQgcG9zLCBpbnQgbWF0Y2gpIHsKLQkJCWZTdHJpbmc9IHN0cmluZzsKLQkJCWZQb3M9IHBvczsKLQkJCWZNYXRjaD0gbWF0Y2g7Ci0JCX0KLQotCQlwdWJsaWMgSURvY3VtZW50IGdldERvY3VtZW50KCkgewotCQkJcmV0dXJuIG5ldyBTdHJpbmdEb2N1bWVudChmU3RyaW5nKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJcmV0dXJuIE1hdGguYWJzKGZQb3MgLSBmTWF0Y2gpOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRPZmZzZXQoKSB7Ci0JCQlpZiAoZlBvcyA+IGZNYXRjaCkgcmV0dXJuIGZNYXRjaDsKLQkJCXJldHVybiBmUG9zOwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFN0cmluZ0RvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQgewotCi0JCXB1YmxpYyBTdHJpbmdEb2N1bWVudChTdHJpbmcgc3RyKSB7Ci0JCQl0aGlzLnNldFRleHRTdG9yZShuZXcgU3RyaW5nVGV4dFN0b3JlKHN0cikpOwotCQkJdGhpcy5zZXQoc3RyKTsKLQkJCWZpbmFsIElEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnQ9IGNyZWF0ZVBhcnRpdGlvbmVyKCk7Ci0JCQl0aGlzLnNldERvY3VtZW50UGFydGl0aW9uZXIoZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKSwgcGFydCk7Ci0JCQlwYXJ0LmNvbm5lY3QodGhpcyk7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0cmluZ1RleHRTdG9yZSBpbXBsZW1lbnRzIElUZXh0U3RvcmUgewotCi0JCXByaXZhdGUgU3RyaW5nIGZTdHJpbmc7Ci0KLQkJcHVibGljIFN0cmluZ1RleHRTdG9yZShmaW5hbCBTdHJpbmcgc3RyKSB7Ci0JCQlmU3RyaW5nPSBzdHI7Ci0JCX0KLQotCQlwdWJsaWMgY2hhciBnZXQoaW50IG9mZnNldCkgewotCQkJcmV0dXJuIGZTdHJpbmcuY2hhckF0KG9mZnNldCk7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldChpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0JCQlyZXR1cm4gZlN0cmluZy5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRMZW5ndGgoKSB7Ci0JCQlyZXR1cm4gZlN0cmluZy5sZW5ndGgoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlcGxhY2UoaW50IG9mZnNldCwgaW50IGxlbmd0aCwgU3RyaW5nIHRleHQpIHsKLQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0KFN0cmluZyB0ZXh0KSB7Ci0JCQlmU3RyaW5nPSB0ZXh0OwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9QQVJUSVRJT049IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgc3RhdGljIElEb2N1bWVudFBhcnRpdGlvbmVyIGNyZWF0ZVBhcnRpdGlvbmVyKCkgewotCQlmaW5hbCBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyIHNjYW49IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCk7Ci0JCWZpbmFsIExpc3QvKjxJUHJlZGljYXRlUnVsZT4qLyBydWxlcz0gbmV3IEFycmF5TGlzdC8qPElQcmVkaWNhdGVSdWxlPiovKCk7Ci0JCXJ1bGVzLmFkZChuZXcgU2luZ2xlTGluZVJ1bGUoInxhIiwgImF8IiwgbmV3IFRva2VuKCJhIikpKTsKLQkJcnVsZXMuYWRkKG5ldyBTaW5nbGVMaW5lUnVsZSgifGIiLCAiYnwiLCBuZXcgVG9rZW4oImIiKSkpOwotCQlydWxlcy5hZGQobmV3IFNpbmdsZUxpbmVSdWxlKCJ8YyIsICJjfCIsIG5ldyBUb2tlbigiYyIpKSk7Ci0JCXNjYW4uc2V0UHJlZGljYXRlUnVsZXMoKElQcmVkaWNhdGVSdWxlW10pIHJ1bGVzLnRvQXJyYXkobmV3IElQcmVkaWNhdGVSdWxlW3J1bGVzLnNpemUoKV0pKTsKLQkJc2Nhbi5zZXREZWZhdWx0UmV0dXJuVG9rZW4obmV3IFRva2VuKERFRkFVTFRfUEFSVElUSU9OKSk7Ci0JCXJldHVybiBuZXcgRmFzdFBhcnRpdGlvbmVyKHNjYW4sIG5ldyBTdHJpbmdbXSB7IERFRkFVTFRfUEFSVElUSU9OLCAiYSIsICJiIiwgImMiIH0pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWU3MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogVGVzdHMgZm9yIERlZmF1bHRVbmRvTWFuYWdlci4gQ2hhbmdlZCBmcm9tIHRoZSBKRmFjZSBvcmlnaW5hbCB0byBjcmVhdGVzCi0gKiBhbmQgdGVzdCBhZ2FpbnN0IGEgc3RydWN0dXJlZCBkb2N1bWVudC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqIFRoZSBtYXhpbXVtIHVuZG8gbGV2ZWwuICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9VTkRPX0xFVkVMPSAyNTY7Ci0KLQkvKiogVGhlIHNoZWxsLiAqLwotCXByaXZhdGUgU2hlbGwgZlNoZWxsOwotCS8qKiBUaGUgdGV4dCB2aWV3ZXIuICovCi0JcHJpdmF0ZSBJVGV4dFZpZXdlciBmVGV4dFZpZXdlcjsKLQkvKiogVGhlIHVuZG8gbWFuYWdlci4gKi8KLQlwcml2YXRlIElVbmRvTWFuYWdlciBmVW5kb01hbmFnZXI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9PUF9DT1VOVD0gMjA7Ci0KLQkvLy0tLSBTdGF0aWMgZGF0YSBzZXRzIGZvciBjb21wYXJpbmcgc2NlbmFyaW9zIC0gb2J0YWluZWQgZnJvbSBjYXB0dXJpbmcgcmFuZG9tIGRhdGEgLS0tCi0JLyoqIE9yaWdpbmFsIGRvY3VtZW50ICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVD0gIis3Y3lnOi9GIVQ0S25XOzArYXUkdDFHJShgWnx1JzcnXyEtaz88Y1wiMlkuXUN3c08uciI7Ci0JLyoqIFJlcGxhY2VtZW50IHN0cmluZyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBbXSBSRVBMQUNFTUVOVFM9IHsgIj4iLCAiRiIsICJNL3ItKiIsICItIiwgImJsIiwgIiIsICJ9JS8jIiwgIiIsICJrJiIsICJmIiwgIlxcZyIsICJjIXgiLCAiVExHLSIsICJOUE8iLCAiUnA5dSIsICIiLCAiWCIsICJXKCIsICIpeiIsICJvZSIsICIiLCAiaCoiLCAidCIsICJJIiwgIlg9Tj4iLCAiMnl0IiwgIiZaIiwgIjIpVz0iLCAiOksiLCAiUDlTIiwgInM4dDhvIiwgIiIsICIiLCAiNXs3IiwgIiUiLCAiIiwgInYzIiwgIld6IiwgInNIIiwgIjNjIiwgIjgiLCAib2wiLCAiLDYkIiwgIjk0WyMiLCAiLn4iLCAibiIsICI+IiwgIjkiLCAiVyIsICIsKEZXIiwgIlEiLCAiXiIsICJCcSIsICIkIiwgInJlIiwgIiIsICI5IiwgIjhbIiwgIk14IiwgIjRiIiwgIiQ2IiwgIkYiLCAiOHNdIiwgIm8iLCAiLSIsICJFJjYiLCAiU1xcIiwgIi8iLCAiei5hIiwgIjRhaSIsICJiIiwgIikiLCAiIiwgImwiLCAiVlUiLCAiN00rUWwiLCAieFo/eCIsICJ4eCIsICJsYyIsICJiIiwgIkEiLCAiISIsICI0cFNVIiwgIiIsICJ7SiIsICJIIiwgImw+XyIsICJuJjkiLCAiIiwgIiZgIiwgIjtpZ1F4cSIsICIiLCAiPiIsICI7XCIiLCAia1xcYF1HIiwgIm97PyIsICIiLCAiSyIsICJfNiIsICI9In07Ci0JLyoqIFBvc2l0aW9uL29mZnNldCBwYWlycyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBQT1NJVElPTlM9IHsgMTgsIDIsIDQzLCAxLCAzLCAyLCAyOCwgMywgMzUsIDEsIDIzLCA1LCAzMiwgMiwgMzAsIDEsIDIyLCAxLCAzNywgMCwgMjMsIDMsIDQzLCAyLCA0NiwgMSwgMTcsIDEsIDM2LCA2LCAxNywgNSwgMzAsIDQsIDI1LCAxLCAyLCAyLCAzMCwgMCwgMzcsIDMsIDI4LCAxLCAzMCwgMiwgMjAsIDUsIDMzLCAxLCAyOSwgMSwgMTUsIDIsIDIxLCAyLCAyNCwgNCwgMzgsIDMsIDgsIDAsIDMzLCAyLCAxNSwgMiwgMjUsIDAsIDgsIDIsIDIwLCAzLCA0MywgMiwgNDQsIDEsIDQ0LCAyLCAzMiwgMiwgNDAsIDIsIDMyLCAzLCAxMiwgMiwgMzgsIDMsIDMzLCAyLCA0NiwgMCwgMTMsIDMsIDQ1LCAwLCAxNiwgMiwgMywgMiwgNDQsIDAsIDQ4LCAwLCAxOCwgNSwgNywgNiwgNywgMywgNDAsIDAsIDksIDEsIDE2LCAzLCAyOCwgMywgMzYsIDEsIDM1LCAyLCAwLCAzLCA2LCAxLCAxMCwgNCwgMTQsIDIsIDE1LCAzLCAzMywgMSwgMzYsIDAsIDM3LCAwLCA0LCAzLCAzMSwgMywgMzMsIDMsIDExLCAzLCAyMCwgMiwgMjUsIDMsIDQsIDMsIDcsIDMsIDE3LCAwLCAzLCAxLCAzMSwgMywgMzQsIDEsIDIxLCAwLCAzMywgMSwgMTcsIDQsIDksIDEsIDI2LCAzLCAyLCAzLCAxMiwgMSwgMjYsIDMsIDksIDUsIDUsIDAsIDMxLCAzLCAwLCAzLCAxMiwgMSwgMSwgMSwgMywgMCwgMzksIDAsIDksIDIsIDIsIDAsIDI4LCAyfTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUc9IGZhbHNlOwotCi0KLQkvKgotCSAqIEBzZWUgVGVzdENhc2UjVGVzdENhc2UoU3RyaW5nKQotCSAqLwotCXB1YmxpYyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqICBAc2VlIFRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJZlNoZWxsPSBuZXcgU2hlbGwoKTsKLQkJZlVuZG9NYW5hZ2VyPSBjcmVhdGVVbmRvTWFuYWdlcihNQVhfVU5ET19MRVZFTCk7Ci0JCWZUZXh0Vmlld2VyPSBuZXcgVGV4dFZpZXdlcihmU2hlbGwsIFNXVC5OT05FKTsKLQkJZlRleHRWaWV3ZXIuc2V0VW5kb01hbmFnZXIoZlVuZG9NYW5hZ2VyKTsKLQkJZlVuZG9NYW5hZ2VyLmNvbm5lY3QoZlRleHRWaWV3ZXIpOwotCX0KLQotCWFic3RyYWN0IHByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCk7Ci0KLQkvKgotCSAqICBAc2VlIFRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQkJZlVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoKTsKLQkJZlVuZG9NYW5hZ2VyPSBudWxsOwotCQlmU2hlbGwuZGlzcG9zZSgpOwotCQlmU2hlbGw9IG51bGw7Ci0JCWZUZXh0Vmlld2VyPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFRlc3QgZm9yIGxpbmUgZGVsaW1pdGVyIGNvbnZlcnNpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRMaW5lRGVsaW1pdGVycygpIHsKLQkJZmluYWwgU3RyaW5nIG9yaWdpbmFsPSAiYVxyXG5iXHJcbiI7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJdHJ5IHsKLQkJCWRvY3VtZW50LnJlcGxhY2UoMSwgMiwgIlxuIik7Ci0JCQlkb2N1bWVudC5yZXBsYWNlKDMsIDIsICJcbiIpOwotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCS8qKgotCSAqIFJhbmRvbWx5IGFwcGxpZXMgZG9jdW1lbnQgY2hhbmdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzKCkgewotCQlmaW5hbCBpbnQgUkFORE9NX1NUUklOR19MRU5HVEg9IDUwOwotCQlmaW5hbCBpbnQgUkFORE9NX1JFUExBQ0VfQ09VTlQ9IDEwMDsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9DaGFuZ2UoSURvY3VtZW50IGRvY3VtZW50LCBpbnQgY291bnQpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBiZWZvcmU9IGRvY3VtZW50LmdldCgpOwotCi0JCQlpZiAoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKGJlZm9yZSk7Ci0KLQkJCVBvc2l0aW9uIFtdIHBvc2l0aW9ucz0gbmV3IFBvc2l0aW9uW2NvdW50XTsKLQkJCVN0cmluZyBbXSBzdHJpbmdzPSBuZXcgU3RyaW5nW2NvdW50XTsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQkJZmluYWwgUG9zaXRpb24gcG9zaXRpb249IGNyZWF0ZVJhbmRvbVBvc2l0aW9uUG9pc3Nvbihkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkJZmluYWwgU3RyaW5nIHN0cmluZz0gY3JlYXRlUmFuZG9tU3RyaW5nUG9pc3NvbigpOwotCQkJCWRvY3VtZW50LnJlcGxhY2UocG9zaXRpb24uZ2V0T2Zmc2V0KCksIHBvc2l0aW9uLmdldExlbmd0aCgpLCBzdHJpbmcpOwotCQkJCXBvc2l0aW9uc1tpXT0gcG9zaXRpb247Ci0JCQkJc3RyaW5nc1tpXT0gc3RyaW5nOwotCQkJfQotCi0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJ7ICIpOwotCQkJCWZvciAoaW50IGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQocG9zaXRpb25zW2ldLmdldE9mZnNldCgpKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiLCAiKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludChwb3NpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCIsICIpOwotCQkJCX0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiB9Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgieyAiKTsKLQkJCQlmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCJcIiIpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KHN0cmluZ3NbaV0pOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCJcIiwgIik7Ci0JCQkJfQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIH0iKTsKLQkJCX0KLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvLyByZXBlYXRhYmxlIHRlc3QgY2FzZSBmb3IgY29tcGFyaW5nIHN1Y2Nlc3MvZmFpbHVyZSBhbW9uZyBkaWZmZXJlbnQgdGVzdHMKLQlwcml2YXRlIHZvaWQgZG9SZXBlYXRhYmxlQ2hhbmdlKElEb2N1bWVudCBkb2N1bWVudCkgewotCQlhc3NlcnRUcnVlKFBPU0lUSU9OUy5sZW5ndGggPj0gKDIgKiBSRVBMQUNFTUVOVFMubGVuZ3RoKSk7Ci0JCXRyeSB7Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgUkVQTEFDRU1FTlRTLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaW50IG9mZnNldD0gUE9TSVRJT05TW2kqMl07Ci0JCQkJaW50IGxlbmd0aD0gUE9TSVRJT05TW2kqMisxXTsKLQkJCQlpZiAoZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgPiBvZmZzZXQgKyBsZW5ndGgpCi0JCQkJCWRvY3VtZW50LnJlcGxhY2Uob2Zmc2V0LCBsZW5ndGgsIFJFUExBQ0VNRU5UU1tpXSk7Ci0JCQkJZWxzZQotCQkJCQlkb2N1bWVudC5yZXBsYWNlKDAsMCwgUkVQTEFDRU1FTlRTW2ldKTsKLQkJCX0KLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3MoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wQ29udmVydExpbmVEZWxpbWl0ZXJzKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RDb252ZXJ0TGluZURlbGltaXRlcnMoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzV2l0aE1peGVkQ29tcG91bmQoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzQXNDb21wb3VuZCgpIHsKLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgZm9yIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04ODE3MgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RSYW5kb21BY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKSB7Ci0KLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCS8vIGRvIG5vdCBjbG9zZSB0aGUgY29tcG91bmQuCi0JCS8vIGZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzV2l0aE1peGVkQ29tcG91bmQoKSB7Ci0KLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDsKLQkJZmluYWwgaW50IE5VTUJFUl9DT01QT1VORFM9IDU7Ci0JCWZpbmFsIGludCBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORD0gMzsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKE5VTUJFUl9DT01QT1VORFMgKiAoMSArIE5VTUJFUl9BVE9NSUNfUEVSX0NPTVBPVU5EKSAqIFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IE5VTUJFUl9DT01QT1VORFM7IGkrKykgewotCQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQkJCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJZm9yIChpbnQgaj0gMDsgaiA8IE5VTUJFUl9BVE9NSUNfUEVSX0NPTVBPVU5EOyBqKyspIHsKLQkJCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkJCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJfQotCQl9Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoIWZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NBc0NvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQkvLyB3aXRoIGEgc2luZ2xlIGNvbXBvdW5kLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgdW5kbwotCQlhc3NlcnRGYWxzZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2Vzc1dpdGhNaXhlZEFuZEVtcHR5Q29tcG91bmQoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCArIDIgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQkvLyBpbnNlcnQgYW4gZW1wdHkgY29tcG91bmQKLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0KLQkgICAgLy8gaW5zZXJ0IHRoZSBhdG9taWMgY2hhbmdlcwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RhbXAoKSB7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCQlsb25nIHN0YW1wPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCAxKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0RXF1YWxzKHN0YW1wLCAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCi0JfQotCi0JLy8gc2VlOiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MTA0Ci0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RhbXAyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudCgiIik7Ci0JCWZpbmFsIGludCBzdHJpbmdMZW5ndGg9IDEzOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgY3JlYXRlUmFuZG9tU3RyaW5nKHN0cmluZ0xlbmd0aCkpOwotCQlsb25nIHN0YW1wPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgY3JlYXRlUmFuZG9tU3RyaW5nKHN0cmluZ0xlbmd0aCkpOwotCQlhc3NlcnRGYWxzZShzdGFtcCA9PSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJhbmRvbVN0cmluZyhpbnQgbGVuZ3RoKSB7Ci0JCWZpbmFsIFN0cmluZ0J1ZmZlciBidWZmZXI9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQlidWZmZXIuYXBwZW5kKGdldFJhbmRvbUNoYXJhY3RlcigpKTsKLQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBnZXRSYW5kb21DaGFyYWN0ZXIoKSB7Ci0JCS8vIFhYWCBzaG91bGQgaW5jbHVkZSBcdAotCQlyZXR1cm4gKGNoYXIpICgzMiArIDk1ICogTWF0aC5yYW5kb20oKSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJhbmRvbVN0cmluZ1BvaXNzb24oKSB7Ci0JCWZpbmFsIGludCBsZW5ndGg9IGdldFJhbmRvbVBvaXNzb25WYWx1ZSgyKTsKLQkJcmV0dXJuIGNyZWF0ZVJhbmRvbVN0cmluZyhsZW5ndGgpOwotCX0KLQkKLQlwcml2YXRlIElEb2N1bWVudCBjcmVhdGVEb2N1bWVudChTdHJpbmcgY29udGVudHMpIHsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZCgib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotLy8JCXJldHVybiBuZXcgRG9jdW1lbnQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFBvc2l0aW9uIGNyZWF0ZVJhbmRvbVBvc2l0aW9uUG9pc3NvbihpbnQgZG9jdW1lbnRMZW5ndGgpIHsKLQotCQlmbG9hdCByYW5kb209IChmbG9hdCkgTWF0aC5yYW5kb20oKTsKLQkJaW50IG9mZnNldD0gKGludCkgKHJhbmRvbSAqIChkb2N1bWVudExlbmd0aCArIDEpKTsKLQotCQkvLyBDYXRjaCBwb3RlbnRpYWwgcm91bmRpbmcgaXNzdWUKLQkJaWYgKG9mZnNldCA9PSBkb2N1bWVudExlbmd0aCArIDEpCi0JCQlvZmZzZXQ9IGRvY3VtZW50TGVuZ3RoOwotCi0JCWludCBsZW5ndGg9IGdldFJhbmRvbVBvaXNzb25WYWx1ZSgyKTsKLQkJaWYgKG9mZnNldCArIGxlbmd0aCA+IGRvY3VtZW50TGVuZ3RoKQotCQkJbGVuZ3RoPSBkb2N1bWVudExlbmd0aCAtIG9mZnNldDsKLQotCQlyZXR1cm4gbmV3IFBvc2l0aW9uKG9mZnNldCwgbGVuZ3RoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UmFuZG9tUG9pc3NvblZhbHVlKGludCBtZWFuKSB7Ci0JCWZpbmFsIGludCBNQVhfVkFMVUU9IDEwOwotCi0JCWZpbmFsIGZsb2F0IHJhbmRvbT0gKGZsb2F0KSBNYXRoLnJhbmRvbSgpOwotCQlmbG9hdCBwcm9iYWJpbGl0eT0gMDsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChwcm9iYWJpbGl0eSA8IDEgJiYgaSA8IE1BWF9WQUxVRSkgewotCQkJcHJvYmFiaWxpdHkgKz0gZ2V0UG9pc3NvbkRpc3RyaWJ1dGlvbihtZWFuLCBpKTsKLQkJCWlmIChyYW5kb20gPD0gcHJvYmFiaWxpdHkpCi0JCQkJYnJlYWs7Ci0JCQlpKys7Ci0JCX0KLQkJcmV0dXJuIGk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmxvYXQgZ2V0UG9pc3NvbkRpc3RyaWJ1dGlvbihmbG9hdCBsYW1iZGEsIGludCBrKSB7Ci0JCXJldHVybiAoZmxvYXQpIChNYXRoLmV4cCgtbGFtYmRhKSAqIE1hdGgucG93KGxhbWJkYSwgaykgLyBmYWN1bHR5KGspKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN1bHR5IG9mIGsuCi0JICoKLQkgKiBAcGFyYW0gayB0aGUgPGNvZGU+aW50PC9jb2RlPiBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBmYWN1bHR5Ci0JICogQHJldHVybiB0aGUgZmFjdWx0eQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBmYWN1bHR5KGludCBrKSB7Ci0JCXJldHVybiBrID09IDAKLQkJCT8gMQotCQkJOiBrICogZmFjdWx0eShrIC0gMSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0UGFpck1hdGNoZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0UGFpck1hdGNoZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWZjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAocGxlc25lckBxdWVudGEub3JnKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkRlZmF1bHRDaGFyYWN0ZXJQYWlyTWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQ2hhcmFjdGVyUGFpck1hdGNoZXI7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBkZWZhdWx0IHBhaXIgbWF0Y2hlci4KLSAqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0UGFpck1hdGNoZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShEZWZhdWx0UGFpck1hdGNoZXJUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNoYXJhY3RlclBhaXJNYXRjaGVyIGNyZWF0ZU1hdGNoZXIoU3RyaW5nIGNoYXJzKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdENoYXJhY3RlclBhaXJNYXRjaGVyKGNoYXJzLnRvQ2hhckFycmF5KCksCi0JCQkJZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QjZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKQotCSAqIEBzaW5jZSAzLjMKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERvY3VtZW50UGFydGl0aW9uaW5nKCkgewotCQlyZXR1cm4gSURvY3VtZW50RXh0ZW5zaW9uMy5ERUZBVUxUX1BBUlRJVElPTklORzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRVbmRvTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhNmI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRlZmF1bHRVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgRGVmYXVsdFVuZG9NYW5hZ2VyLgotICoKLSAqIEBzaW5jZSAzLjIKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRVbmRvTWFuYWdlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKERlZmF1bHRVbmRvTWFuYWdlclRlc3QuY2xhc3MpOwotCX0KLQotCS8qCi0JICogQHNlZSBUZXN0Q2FzZSNUZXN0Q2FzZShTdHJpbmcpCi0JICovCi0JcHVibGljIERlZmF1bHRVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QjY3JlYXRlVW5kb01hbmFnZXIoaW50KQotCSAqIEBzaW5jZSAzLjIKLQkgKi8KLQlwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0VW5kb01hbmFnZXIobWF4VW5kb0xldmVsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTRjNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmludGVybmFsLnRleHQuaHRtbC5IVE1MMlRleHRSZWFkZXI7Ci0KLQotcHVibGljIGNsYXNzIEhUTUwyVGV4dFJlYWRlclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUc9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExEPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0JcHVibGljIEhUTUwyVGV4dFJlYWRlclRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEhUTUwyVGV4dFJlYWRlclRlc3Rlci5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeShTdHJpbmcgaW5wdXQsIFN0cmluZyBleHBlY3RlZE91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlSZWFkZXIgcmVhZGVyPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTsKLQkJSFRNTDJUZXh0UmVhZGVyIGh0bWxSZWFkZXI9IG5ldyBIVE1MMlRleHRSZWFkZXIocmVhZGVyLCBudWxsKTsKLQkJU3RyaW5nIHJlc3VsdD0gaHRtbFJlYWRlci5nZXRTdHJpbmcoKTsKLQkJaWYgKERFQlVHKQotCQkJU3lzdGVtLm91dC5wcmludGxuKCI8IisgcmVzdWx0ICsiLz4iKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkT3V0cHV0LCByZXN1bHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGNvZGU+Mzw1PGNvZGU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAiMzw1IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGRsPjxkdD5AYXV0aG9yPC9kdD48ZGQ+Rm9vIEJhcjwvZGQ+PC9kbD4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9IExEKyAiQGF1dGhvciIrTEQrIlx0Rm9vIEJhciIrTEQ7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MigpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjM+NTxjb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjM+NSI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MygpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxhIGhyZWY9IFwiPHA+dGhpcyBpcyBvbmx5IGEgc3RyaW5nIC0gbm90IGEgdGFnPHA+XCI+dGV4dDwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICJ0ZXh0IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Q0KCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAJIjxodG1sPjxib2R5IHRleHQ9XCIjMDAwMDAwXCIgYmdjb2xvcj1cIiNGRkZGODhcIj48Zm9udCBzaXplPS0xPjxoNT52b2lkIHAuQmIuZmVzKCk8L2g1PjxwPjxkbD48ZHQ+UGFyYW1ldGVyczo8L2R0PjxkZD48Yj5pPC9iPiBmcmVkIG9yIDxjb2RlPm51bGw8L2NvZGU+PC9kZD48L2RsPjwvZm9udD48L2JvZHk+PC9odG1sPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gInZvaWQgcC5CYi5mZXMoKSIrIExEICsgTEQgKyBMRCsgIlBhcmFtZXRlcnM6IisgTEQgKyAiXHRpIGZyZWQgb3IgbnVsbCIrTEQ7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NSgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjE8MjwzPDQ8L2NvZGU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAiMTwyPDM8NCI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NigpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJLy90ZXN0IGZvciBidWcgMTkwNzAKLQkJU3RyaW5nIHN0cmluZz0gIjxwPlNvbWV0aGluZy48cD5Tb21ldGhpbmcgbW9yZS4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9IExEICsgIlNvbWV0aGluZy4iICsgTEQgKyAiU29tZXRoaW5nIG1vcmUuIjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgc3RyaW5nPSAiPCEtLSBiZWdpbi11c2VyLWRvYyAtLT5ubyBjb21tZW50PCEtLSBlbmQtdXNlci1kb2MgLS0+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAibm8gY29tbWVudCI7Ci0JCXZlcmlmeShzdHJpbmcsZXhwZWN0ZWQpOwotCX0KLQotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0pGYWNlVGV4dFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWJmZWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0pGYWNlVGV4dFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogVGVzdCBTdWl0ZSBmb3Igb3JnLmVjbGlwc2UuamZhY2UudGV4dC4KLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBKRmFjZVRleHRUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIm9yZy5lY2xpcHNlLmpmYWNlLnRleHQgVGVzdCBTdWl0ZSB1c2luZyBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0vLwkJc3VpdGUuYWRkVGVzdChIVE1MMlRleHRSZWFkZXJUZXN0ZXIuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0SG92ZXJQb3B1cFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0UHJlc2VudGF0aW9uVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChEZWZhdWx0VW5kb01hbmFnZXJUZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChSdWxlc1Rlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFJlY29uY2lsZXJUZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEZWZhdWx0UGFpck1hdGNoZXJUZXN0LnN1aXRlKCkpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODRkNWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1Rlc3RUZXh0RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dEV2ZW50OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0VGV4dEV2ZW50IGV4dGVuZHMgVGV4dEV2ZW50IHsKLQotCVRlc3RUZXh0RXZlbnQoRG9jdW1lbnRFdmVudCBldmVudCwgU3RyaW5nIHJlcGxhY2VkVGV4dCkgewotCQlzdXBlcihldmVudC5nZXRPZmZzZXQoKSwgZXZlbnQuZ2V0TGVuZ3RoKCksIGV2ZW50LmdldFRleHQoKSwgcmVwbGFjZWRUZXh0LCBldmVudCwgdHJ1ZSk7Ci0JfQotCi0JVGVzdFRleHRFdmVudChTdHJpbmcgdGV4dCkgewotCQlzdXBlcigwLCAwLCB0ZXh0LCAoU3RyaW5nKSBudWxsLCAoRG9jdW1lbnRFdmVudCkgbnVsbCwgdHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1Rlc3RUZXh0Vmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODU5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9JbmRlbnRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUV2ZW50Q29uc3VtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRmluZFJlcGxhY2VUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SW5wdXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dE9wZXJhdGlvblRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVZpZXdwb3J0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0UHJlc2VudGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLQotCi0KLQotcHVibGljIGNsYXNzIFRlc3RUZXh0Vmlld2VyIGltcGxlbWVudHMgSVNvdXJjZVZpZXdlciwgSURvY3VtZW50TGlzdGVuZXIgewotCi0KLQlwcm90ZWN0ZWQgSURvY3VtZW50IGZEb2N1bWVudDsKLQlwcm90ZWN0ZWQgTGlzdCBmSW5wdXRMaXN0ZW5lcnM9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBmVGV4dExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBUZXh0UHJlc2VudGF0aW9uIGZUZXh0UHJlc2VudGF0aW9uOwotCXByb3RlY3RlZCBQb2ludCBmU2VsZWN0aW9uPSBuZXcgUG9pbnQoLTEsIC0xKTsKLQlwcm90ZWN0ZWQgU3RyaW5nIGZEZWxldGlvbjsKLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgZG9jdW1lbnQsIGludCBwMSwgaW50IHAyKSB7Ci0JCXNldERvY3VtZW50KGRvY3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldERvY3VtZW50KCkKLQkgKi8KLQlwdWJsaWMgSURvY3VtZW50IGdldERvY3VtZW50KCkgewotCQlyZXR1cm4gZkRvY3VtZW50OwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBkb2N1bWVudCkgewotCQlJRG9jdW1lbnQgb2xkRG9jPSBmRG9jdW1lbnQ7Ci0JCWZpcmVUZXh0SW5wdXRDaGFuZ2VkKG9sZERvYywgZG9jdW1lbnQsIHRydWUpOwotCi0JCWlmIChvbGREb2MgIT0gbnVsbCkKLQkJCW9sZERvYy5yZW1vdmVEb2N1bWVudExpc3RlbmVyKHRoaXMpOwotCi0JCWZEb2N1bWVudD0gZG9jdW1lbnQ7Ci0KLQkJaWYgKGZEb2N1bWVudCAhPSBudWxsKSB7Ci0JCQlmaXJlVGV4dENoYW5nZWQobmV3IFRlc3RUZXh0RXZlbnQoZkRvY3VtZW50LmdldCgpKSk7Ci0JCQlmRG9jdW1lbnQuYWRkRG9jdW1lbnRMaXN0ZW5lcih0aGlzKTsKLQkJfQotCi0JCWZpcmVUZXh0SW5wdXRDaGFuZ2VkKG9sZERvYywgZG9jdW1lbnQsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJZklucHV0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhZGRUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVGV4dElucHV0TGlzdGVuZXIoSVRleHRJbnB1dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWlmICghZklucHV0TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkKLQkJCWZJbnB1dExpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpcmVUZXh0SW5wdXRDaGFuZ2VkKElEb2N1bWVudCBvbGREb2MsIElEb2N1bWVudCBuZXdEb2MsIGJvb2xlYW4gYWJvdXQpIHsKLQkJSXRlcmF0b3IgZT0gbmV3IEFycmF5TGlzdChmSW5wdXRMaXN0ZW5lcnMpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJSVRleHRJbnB1dExpc3RlbmVyIGw9IChJVGV4dElucHV0TGlzdGVuZXIpIGUubmV4dCgpOwotCQkJaWYgKGFib3V0KQotCQkJCWwuaW5wdXREb2N1bWVudEFib3V0VG9CZUNoYW5nZWQob2xkRG9jLCBuZXdEb2MpOwotCQkJZWxzZQotCQkJCWwuaW5wdXREb2N1bWVudENoYW5nZWQob2xkRG9jLCBuZXdEb2MpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNjaGFuZ2VUZXh0UHJlc2VudGF0aW9uKFRleHRQcmVzZW50YXRpb24sIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgY2hhbmdlVGV4dFByZXNlbnRhdGlvbihUZXh0UHJlc2VudGF0aW9uIHByZXNlbnRhdGlvbiwgYm9vbGVhbiBwMSkgewotCQlmVGV4dFByZXNlbnRhdGlvbj0gcHJlc2VudGF0aW9uOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjaW52YWxpZGF0ZVRleHRQcmVzZW50YXRpb24oKQotCSAqLwotCXB1YmxpYyB2b2lkIGludmFsaWRhdGVUZXh0UHJlc2VudGF0aW9uKCkgewotCX0KLQotCXB1YmxpYyBUZXh0UHJlc2VudGF0aW9uIGdldFRleHRQcmVzZW50YXRpb24oKSB7Ci0JCXJldHVybiBmVGV4dFByZXNlbnRhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb2N1bWVudEFib3V0VG9CZUNoYW5nZWQoRG9jdW1lbnRFdmVudCBldmVudCkgewotCQl0cnkgewotCQkJZkRlbGV0aW9uPSBmRG9jdW1lbnQuZ2V0KGV2ZW50LmdldE9mZnNldCgpLCBldmVudC5nZXRMZW5ndGgoKSk7Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIHgpIHsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRvY3VtZW50Q2hhbmdlZChEb2N1bWVudEV2ZW50IGV2ZW50KSB7Ci0JCWZpcmVUZXh0Q2hhbmdlZChuZXcgVGVzdFRleHRFdmVudChldmVudCwgZkRlbGV0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRGaW5kUmVwbGFjZVRhcmdldCgpCi0JICovCi0JcHVibGljIElGaW5kUmVwbGFjZVRhcmdldCBnZXRGaW5kUmVwbGFjZVRhcmdldCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUZXh0T3BlcmF0aW9uVGFyZ2V0KCkKLQkgKi8KLQlwdWJsaWMgSVRleHRPcGVyYXRpb25UYXJnZXQgZ2V0VGV4dE9wZXJhdGlvblRhcmdldCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRUZXh0Q29sb3IoQ29sb3IsIGludCwgaW50LCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb2xvcihDb2xvciBwMCwgaW50IHAxLCBpbnQgcDIsIGJvb2xlYW4gcDMpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHRDb2xvcihDb2xvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUZXh0Q29sb3IoQ29sb3IgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI292ZXJsYXBzV2l0aFZpc2libGVSZWdpb24oaW50LCBpbnQpCi0JICovCi0JcHVibGljIGJvb2xlYW4gb3ZlcmxhcHNXaXRoVmlzaWJsZVJlZ2lvbihpbnQgcDAsIGludCBwMSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRWaXNpYmxlUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgSVJlZ2lvbiBnZXRWaXNpYmxlUmVnaW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3Jlc2V0VmlzaWJsZVJlZ2lvbigpCi0JICovCi0JcHVibGljIHZvaWQgcmVzZXRWaXNpYmxlUmVnaW9uKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VmlzaWJsZVJlZ2lvbihpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlUmVnaW9uKGludCBwMCwgaW50IHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRJbmRlbnRQcmVmaXhlcyhTdHJpbmdbXSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGVudFByZWZpeGVzKFN0cmluZ1tdIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldERlZmF1bHRQcmVmaXhlcyhTdHJpbmdbXSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRQcmVmaXhlcyhTdHJpbmdbXSBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRBdXRvSW5kZW50U3RyYXRlZ3koSUF1dG9JbmRlbnRTdHJhdGVneSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEF1dG9JbmRlbnRTdHJhdGVneShJQXV0b0luZGVudFN0cmF0ZWd5IHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHREb3VibGVDbGlja1N0cmF0ZWd5KElUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHREb3VibGVDbGlja1N0cmF0ZWd5KElUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRVbmRvTWFuYWdlcihJVW5kb01hbmFnZXIpCi0JICovCi0JcHVibGljIHZvaWQgc2V0VW5kb01hbmFnZXIoSVVuZG9NYW5hZ2VyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUZXh0V2lkZ2V0KCkKLQkgKi8KLQlwdWJsaWMgU3R5bGVkVGV4dCBnZXRUZXh0V2lkZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXh0SG92ZXIoSVRleHRIb3ZlciBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhY3RpdmF0ZVBsdWdpbnMoKQotCSAqLwotCXB1YmxpYyB2b2lkIGFjdGl2YXRlUGx1Z2lucygpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3Jlc2V0UGx1Z2lucygpCi0JICovCi0JcHVibGljIHZvaWQgcmVzZXRQbHVnaW5zKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5zZXQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0VG9wSW5zZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0Qm90dG9tSW5kZXhFbmRPZmZzZXQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0Qm90dG9tSW5kZXhFbmRPZmZzZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0Qm90dG9tSW5kZXgoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0Qm90dG9tSW5kZXgoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5kZXhTdGFydE9mZnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRUb3BJbmRleFN0YXJ0T2Zmc2V0KCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRvcEluZGV4KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFRvcEluZGV4KCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRvcEluZGV4KGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUb3BJbmRleChpbnQgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JldmVhbFJhbmdlKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHJldmVhbFJhbmdlKGludCBwMCwgaW50IHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRTZWxlY3RlZFJhbmdlKCkKLQkgKi8KLQlwdWJsaWMgUG9pbnQgZ2V0U2VsZWN0ZWRSYW5nZSgpIHsKLQkJcmV0dXJuIGZTZWxlY3Rpb247Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRTZWxlY3RlZFJhbmdlKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkUmFuZ2UoaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotCQlmU2VsZWN0aW9uLng9IG9mZnNldDsKLQkJZlNlbGVjdGlvbi55PSBsZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNpc0VkaXRhYmxlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VkaXRhYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEVkaXRhYmxlKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0RWRpdGFibGUoYm9vbGVhbiBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RXZlbnRDb25zdW1lcihJRXZlbnRDb25zdW1lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFdmVudENvbnN1bWVyKElFdmVudENvbnN1bWVyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNyZW1vdmVUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmVGV4dExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpcmVUZXh0Q2hhbmdlZChUZXh0RXZlbnQgZXZlbnQpIHsKLQkJSXRlcmF0b3IgZT0gbmV3IEFycmF5TGlzdChmVGV4dExpc3RlbmVycykuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dExpc3RlbmVyIGw9IChJVGV4dExpc3RlbmVyKSBlLm5leHQoKTsKLQkJCWwudGV4dENoYW5nZWQoZXZlbnQpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhZGRUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlpZiAoIWZUZXh0TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkKLQkJCWZUZXh0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNyZW1vdmVWaWV3cG9ydExpc3RlbmVyKElWaWV3cG9ydExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNnZXRTZWxlY3Rpb25Qcm92aWRlcigpCi0JICovCi0JcHVibGljIElTZWxlY3Rpb25Qcm92aWRlciBnZXRTZWxlY3Rpb25Qcm92aWRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3Nob3dBbm5vdGF0aW9ucyhib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNob3dBbm5vdGF0aW9ucyhib29sZWFuIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3JlbW92ZVJhbmdlSW5kaWNhdGlvbigpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlUmFuZ2VJbmRpY2F0aW9uKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNnZXRSYW5nZUluZGljYXRpb24oKQotCSAqLwotCXB1YmxpYyBJUmVnaW9uIGdldFJhbmdlSW5kaWNhdGlvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3NldFJhbmdlSW5kaWNhdGlvbihpbnQsIGludCwgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSYW5nZUluZGljYXRpb24oaW50IHAwLCBpbnQgcDEsIGJvb2xlYW4gcDIpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0UmFuZ2VJbmRpY2F0b3IoQW5ub3RhdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSYW5nZUluZGljYXRvcihBbm5vdGF0aW9uIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldEFubm90YXRpb25Nb2RlbCgpCi0JICovCi0JcHVibGljIElBbm5vdGF0aW9uTW9kZWwgZ2V0QW5ub3RhdGlvbk1vZGVsKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsLCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgcDAsIElBbm5vdGF0aW9uTW9kZWwgcDEsIGludCBwMiwgaW50IHAzKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3NldERvY3VtZW50KElEb2N1bWVudCwgSUFubm90YXRpb25Nb2RlbCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgcDAsIElBbm5vdGF0aW9uTW9kZWwgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0QW5ub3RhdGlvbkhvdmVyKElBbm5vdGF0aW9uSG92ZXIpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QW5ub3RhdGlvbkhvdmVyKElBbm5vdGF0aW9uSG92ZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjY29uZmlndXJlKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24pCi0JICovCi0JcHVibGljIHZvaWQgY29uZmlndXJlKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gcDApIHsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0SG92ZXJQb3B1cFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZhNjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgVGV4dEhvdmVyUG9wdXBUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0KLQlwdWJsaWMgVGV4dEhvdmVyUG9wdXBUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dEhvdmVyUG9wdXBUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQl9Ci0KLQotCXByb3RlY3RlZCBpbnQgc2VhcmNoKGludFtdIGFycmF5LCBpbnQgeCkgewotCQlpbnQgbG93PSAwOwotCQlpbnQgaGlnaD0gYXJyYXkubGVuZ3RoIC0xOwotCi0JCXdoaWxlIChoaWdoID4gbG93KSB7Ci0JCQlpbnQgb2Zmc2V0PSAobG93ICsgaGlnaCkgLyAyOwotCQkJaW50IGxvb2t1cD0gYXJyYXlbb2Zmc2V0XTsKLQkJCWlmIChsb29rdXAgPiB4KQotCQkJCWhpZ2g9IG9mZnNldCAtIDE7Ci0JCQllbHNlIGlmIChsb29rdXAgPCB4KQotCQkJCWxvdz0gb2Zmc2V0ICsgMTsKLQkJCWVsc2UKLQkJCQlsb3c9IGhpZ2g9IG9mZnNldDsKLQkJfQotCi0JCXJldHVybiBoaWdoOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2goKSB7Ci0JCWludFtdIHZhbHVlcz0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQlpbnQgcmVzdWx0PSBzZWFyY2godmFsdWVzLCBpKTsKLQkJCWFzc2VydFRydWUoaSA9PSByZXN1bHQpOwotCQl9Ci0KLQkJaW50W10gdmFsdWVzMj0geyAwLCAzLCA2LCA5LCAxMiwgMTUsIDE4LCAyMSwgMjQsIDI3IH07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQlpbnQgcmVzdWx0PSBzZWFyY2godmFsdWVzMiwgaSAqIDMpOwotCQkJYXNzZXJ0VHJ1ZShpID09IHJlc3VsdCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFByZXNlbnRhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5ZThkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFByZXNlbnRhdGlvbjsKLQotcHVibGljIGNsYXNzIFRleHRQcmVzZW50YXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PUk1BTD0gU1dULk5PUk1BTDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQk9MRD0gU1dULkJPTEQ7Ci0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSVRBTElDPSBTV1QuSVRBTElDOwotCi0JcHJpdmF0ZSBUZXh0UHJlc2VudGF0aW9uIGZUZXh0UHJlc2VudGF0aW9uOwotCXByaXZhdGUgU3R5bGVSYW5nZVtdIGZBbGxSYW5nZXM7Ci0JcHJpdmF0ZSBTdHlsZVJhbmdlW10gZk5vbkRlZmF1bHRSYW5nZXM7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRleHRQcmVzZW50YXRpb25UZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJc2V0VXBTdHlsZVJhbmdlcygpOwotCQlzZXRVcFRleHRQcmVzZW50YXRpb24oKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBTdHlsZVJhbmdlcygpIHsKLQkJZkFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpCi0JCX07Ci0KLQkJZk5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpCi0JCX07Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVGV4dFByZXNlbnRhdGlvbigpIHsKLQkJZlRleHRQcmVzZW50YXRpb249IG5ldyBUZXh0UHJlc2VudGF0aW9uKCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLnNldERlZmF1bHRTdHlsZVJhbmdlKGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMTQwLCBOT1JNQUwpKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGZBbGxSYW5nZXMubGVuZ3RoOyBpKyspCi0JCQlmVGV4dFByZXNlbnRhdGlvbi5hZGRTdHlsZVJhbmdlKGZBbGxSYW5nZXNbaV0pOwotCX0KLQotCXByaXZhdGUgU3R5bGVSYW5nZSBjcmVhdGVTdHlsZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBjcmVhdGVTdHlsZVJhbmdlKHN0YXJ0LCBlbmQsIG51bGwsIG51bGwsIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlUmFuZ2UgY3JlYXRlU3R5bGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIENvbG9yIGZvcmVncm91bmQsIENvbG9yIGJhY2tncm91bmQsIGludCBzdHlsZSkgewotCQlyZXR1cm4gbmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0LCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBzdHlsZSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZm9yZWdyb3VuZCwgaW50IGJhY2tncm91bmQsIGludCBzdHlsZSkgewotCQlyZXR1cm4gY3JlYXRlU3R5bGVSYW5nZShzdGFydCwgZW5kLCBjcmVhdGVDb2xvcihmb3JlZ3JvdW5kLCBmb3JlZ3JvdW5kLCBmb3JlZ3JvdW5kKSwgY3JlYXRlQ29sb3IoYmFja2dyb3VuZCwgYmFja2dyb3VuZCwgYmFja2dyb3VuZCksIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIERpc3BsYXkgZkRpc3BsYXk9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBjb2xvci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVkIHRoZSBhbW91bnQgb2YgcmVkIGluIHRoZSBjb2xvcgotCSAqIEBwYXJhbSBncmVlbiB0aGUgYW1vdW50IG9mIGdyZWVuIGluIHRoZSBjb2xvcgotCSAqIEBwYXJhbSBibHVlIHRoZSBhbW91bnQgb2YgYmx1ZSBpbiB0aGUgY29sb3IKLQkgKiBAcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBpcyBzbWFsbGVyIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gMjU1Ci0JICovCi0JcHJpdmF0ZSBDb2xvciBjcmVhdGVDb2xvcihpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSB7Ci0JCWlmIChyZWQgPCAwIHx8IHJlZCA+IDI1NSB8fCBncmVlbiA8IDAgfHwgZ3JlZW4gPiAyNTUgfHwgYmx1ZSA8IDAgfHwgYmx1ZSA+IDI1NSkKLQkJCXJldHVybiBudWxsOwotCQlyZXR1cm4gbmV3IENvbG9yKGZEaXNwbGF5LCByZWQsIGdyZWVuLCBibHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZWdpb25zKFN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcywgU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcykgewotCQlJdGVyYXRvciBlPSBmVGV4dFByZXNlbnRhdGlvbi5nZXRBbGxTdHlsZVJhbmdlSXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkQWxsUmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRUcnVlKGUuaGFzTmV4dCgpKTsKLQkJCWFzc2VydEVxdWFscyhleHBlY3RlZEFsbFJhbmdlc1tpXSwgZS5uZXh0KCkpOwotCQl9Ci0JCWFzc2VydFRydWUoIWUuaGFzTmV4dCgpKTsKLQotCQllPSBmVGV4dFByZXNlbnRhdGlvbi5nZXROb25EZWZhdWx0U3R5bGVSYW5nZUl0ZXJhdG9yKCk7Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoZS5oYXNOZXh0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlc1tpXSwgZS5uZXh0KCkpOwotCQl9Ci0JCWFzc2VydFRydWUoIWUuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VW5jbGlwcGVkUmVnaW9ucygpIHsKLQkJY2hlY2tSZWdpb25zKGZBbGxSYW5nZXMsIGZOb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpcHBlZFJlZ2lvbnMxKCkgewotCQlmVGV4dFByZXNlbnRhdGlvbi5zZXRSZXN1bHRXaW5kb3cobmV3IFJlZ2lvbigwLCAxNDApKTsKLQkJY2hlY2tSZWdpb25zKGZBbGxSYW5nZXMsIGZOb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpcHBlZFJlZ2lvbnMyKCkgewotCi0JCWZUZXh0UHJlc2VudGF0aW9uLnNldFJlc3VsdFdpbmRvdyhuZXcgUmVnaW9uKDMwLCA3MCkpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgMTcsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAxNywgMjQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggMjQsIDY2LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNjYsIDcwLCBCT0xEKQotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJY3JlYXRlU3R5bGVSYW5nZSggMTcsIDI0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDY2LCA3MCwgQk9MRCkKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZmlyc3QgZXhpc3RpbmcgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAyLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGxhc3QgZXhpc3RpbmcgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTIoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDEzOCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZXhpc3RpbmcgZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMygpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjIsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSB3aXRoaW4gZXhpc3RpbmcgZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlNCgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMiwgMjQsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDIyLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjIsIDI0LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyNCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIyLCAyNCwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGF0IGVuZCBvZiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U1KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U2KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugd2l0aGluIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U3KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA0OSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0OSwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA0OSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0OSwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U4KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgZnJvbSBleGlzdGluZyBkZWZhdWx0IHRvIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U5KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA0OSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHRvIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEwKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDUyLCA1NiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTYsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIGRlZmF1bHQgb3ZlciBub24tZGVmYXVsdCB0byBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMSgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg0NSwgNTYsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ1LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDU2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NiwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIG5vbi1kZWZhdWx0IG92ZXIgZGVmYXVsdCB0byBub24tZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTIoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDk4LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDk2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDk2LCA5OCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk4LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA5NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg5NiwgOTgsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5OCwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugb3ZlciBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMygpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMCwgNDcsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugb3ZlciBleGlzdGluZyBub24tZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTQoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlczEoKSB7Ci0JCVN0eWxlUmFuZ2VbXSByYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGZpcnN0IGV4aXN0aW5nCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBzdGFydCBvZiBleGlzdGluZyBkZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyNCwgMjYsIDEsIC0xLCBOT1JNQUwpLCAvLyB3aXRoaW4gZXhpc3RpbmcgZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgZW5kIG9mIGV4aXN0aW5nIGRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBOT1JNQUwpLCAvLyB3aXRoaW4gZXhpc3Rpbmcgbm9uLWRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IGVuZCBvZiBleGlzdGluZyBub24tZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBlbmQgb2YgbGFzdCBleGlzdGluZwotCQl9OwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2VzKHJhbmdlcyk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAyLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIyLCAgMjQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyNCwgMjYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDI2LCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1MCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDEzOCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDIyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1MCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLS8vIFRlbXBsYXRlCi0vLwotLy8JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTAoKSB7Ci0vLy8vCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpOwotLy8vLwkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLS8vCi0vLy8vCQlTdHlsZVJhbmdlW10gcmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLS8vLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwKLS8vLy8JCX07Ci0vLy8vCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2VzKHJhbmdlcyk7Ci0vLwotLy8JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotLy8JCX07Ci0vLwotLy8JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotLy8JCX07Ci0vLwotLy8JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLS8vCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmZDI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0Vmlld2VyVW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLkFic3RyYWN0T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb2FibGVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLk9wZXJhdGlvbkhpc3RvcnlGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5Eb2N1bWVudFVuZG9FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LnVuZG8uRG9jdW1lbnRVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LnVuZG8uSURvY3VtZW50VW5kb0xpc3RlbmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJVbmRvTWFuYWdlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgVGV4dFZpZXdlclVuZG9NYW5hZ2VyLgotICoKLSAqIEBzaW5jZSAzLjIKLSAqLwotcHVibGljIGNsYXNzIFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuY2xhc3MpOwotCX0KLQotCS8qCi0JICogQHNlZSBUZXN0Q2FzZSNUZXN0Q2FzZShTdHJpbmcpCi0JICovCi0JcHVibGljIFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QjY3JlYXRlVW5kb01hbmFnZXIoaW50KQotCSAqIEBzaW5jZSAzLjIKLQkgKi8KLQlwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpIHsKLQkJcmV0dXJuIG5ldyBUZXh0Vmlld2VyVW5kb01hbmFnZXIobWF4VW5kb0xldmVsKTsKLQl9Ci0KLQkvLy0tLSBEb2N1bWVudFVuZG9NYW5hZ2VyIG9ubHkgLS0tCi0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcChmaW5hbCBib29sZWFuIGlzVW5kb2FibGUpIHRocm93cyBFeGNlcHRpb24gewotCQlPYmplY3QgY29udGV4dD0gbmV3IE9iamVjdCgpOwotCQlEb2N1bWVudFVuZG9NYW5hZ2VyIHRlbXBVbmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIobmV3IERvY3VtZW50KCkpOwotCQl0ZW1wVW5kb01hbmFnZXIuY29ubmVjdChjb250ZXh0KTsKLQotCQlJVW5kb2FibGVPcGVyYXRpb24gb3BlcmF0aW9uPSBuZXcgQWJzdHJhY3RPcGVyYXRpb24oIiIpIHsKLQkJCXB1YmxpYyBib29sZWFuIGNhblVuZG8oKSB7Ci0JCQkJcmV0dXJuIGlzVW5kb2FibGU7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJCXB1YmxpYyBJU3RhdHVzIHJlZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgdW5kbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCX07Ci0JCW9wZXJhdGlvbi5hZGRDb250ZXh0KHRlbXBVbmRvTWFuYWdlci5nZXRVbmRvQ29udGV4dCgpKTsKLQkJT3BlcmF0aW9uSGlzdG9yeUZhY3RvcnkuZ2V0T3BlcmF0aW9uSGlzdG9yeSgpLmFkZChvcGVyYXRpb24pOwotCi0JCWFzc2VydEVxdWFscyhpc1VuZG9hYmxlLCB0ZW1wVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgRG9jdW1lbnRVbmRvTWFuYWdlciB1bmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIobmV3IERvY3VtZW50KCkpOwotCQlPYmplY3QgbmV3Q29udGV4dD0gbmV3IE9iamVjdCgpOwotCQl1bmRvTWFuYWdlci5jb25uZWN0KG5ld0NvbnRleHQpOwotCi0JCXVuZG9NYW5hZ2VyLmFkZERvY3VtZW50VW5kb0xpc3RlbmVyKG5ldyBJRG9jdW1lbnRVbmRvTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBkb2N1bWVudFVuZG9Ob3RpZmljYXRpb24oRG9jdW1lbnRVbmRvRXZlbnQgZXZlbnQpIHsKLQkJCQlmYWlsKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXVuZG9NYW5hZ2VyLnRyYW5zZmVyVW5kb0hpc3RvcnkodGVtcFVuZG9NYW5hZ2VyKTsKLQkJdGVtcFVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoY29udGV4dCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGlzVW5kb2FibGUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl1bmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJdW5kb01hbmFnZXIuZGlzY29ubmVjdChuZXdDb250ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNmZXJOb25VbmRvYWJsZU5vblRleHRPcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcChmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zZmVyVW5kb2FibGVOb25UZXh0T3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW50ZXJuYWxUZXN0VHJhbnNmZXJOb25UZXh0T3AodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhblVuZG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCWZpbmFsIERvY3VtZW50VW5kb01hbmFnZXIgdW5kb01hbmFnZXI9IG5ldyBEb2N1bWVudFVuZG9NYW5hZ2VyKGRvYyk7Ci0JCU9iamVjdCBjb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCXVuZG9NYW5hZ2VyLmNvbm5lY3QoY29udGV4dCk7Ci0KLQkJdW5kb01hbmFnZXIuYWRkRG9jdW1lbnRVbmRvTGlzdGVuZXIobmV3IElEb2N1bWVudFVuZG9MaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgZG9jdW1lbnRVbmRvTm90aWZpY2F0aW9uKERvY3VtZW50VW5kb0V2ZW50IGV2ZW50KSB7Ci0JCQkJaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IERvY3VtZW50VW5kb0V2ZW50LkFCT1VUX1RPX1VORE8pCi0JCQkJCWFzc2VydEVxdWFscyh0cnVlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCQllbHNlIGlmIChldmVudC5nZXRFdmVudFR5cGUoKSA9PSBEb2N1bWVudFVuZG9FdmVudC5VTkRPTkUpCi0JCQkJCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCQl9Ci0JCX0pOwotCi0JCWRvYy5zZXQoImZvbyIpOwotCi0JCWFzc2VydEVxdWFscyh0cnVlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJdW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRFcXVhbHMoZmFsc2UsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCXVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoY29udGV4dCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9yZWNvbmNpbGVyL0Fic3RyYWN0UmVjb25jaWxlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBmYmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudGVzdHMuQWNjZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuQWJzdHJhY3RSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5EaXJ0eVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsaW5nU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5UZXN0VGV4dFZpZXdlcjsKLQotCi0vKioKLSAqIFJlY29uY2lsZXIgdGVzdHMuIFVzZXMgYmFycmllciBzeW5jaHJvbml6YXRpb24gYW5kIGEgY2FsbCBsb2cgdG8gYXNzZXJ0Ci0gKiBjb3JyZWN0IG9yZGVyIG9mIHJlY29uY2lsaW5nIGV2ZW50cy4KLSAqCi0gKiBUT0RPIHRlc3QgcmVjb25jaWxlciBhcmd1bWVudHMgKGRlbGF5ID4gMCBldGMuKQotICogVE9ETyBpbmNyZW1lbnRhbCByZWNvbmNpbGVyIHRlc3RzCi0gKgotICogQHNpbmNlIDMuMQotICovCi1wdWJsaWMgY2xhc3MgQWJzdHJhY3RSZWNvbmNpbGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIE1vZGlmaWVkIGJhcnJpZXI6IHRoZXJlIGFyZSB0d28gdGhyZWFkczogdGhlIG1haW4gKHRlc3RpbmcpIHRocmVhZAotCSAqIGNyZWF0aW5nIHRoZSBiYXJyaWVyLCBhbmQgdGhlIHJlY29uY2lsZXIgdGhyZWFkLiBXaGVuIGJvdGggdGhyZWFkcyBoYXZlCi0JICogbWV0IGF0IHRoZSBiYXJyaWVyLCB0aGUgbWFpbiB0aHJlYWQgaXMgcmVsZWFzZWQgYW5kIGNhbiBwZXJmb3JtCi0JICogYXNzZXJ0aW9ucyB3aGlsZSBiZWluZyBzdXJlIHRoYXQgdGhlIHJlY29uY2lsZXIgaXMgZG9ybWFudC4gQWZ0ZXIgdGhlCi0JICogdGVzdHMgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgdGhlIG1haW4gdGhyZWFkIG11c3QgY2FsbCA8Y29kZT53YWtlQWxsPC9jb2RlPgotCSAqIHRvIHJlbGVhc2UgdGhlIHJlY29uY2lsZXIgdGhyZWFkLgotCSAqLwotCXN0YXRpYyBjbGFzcyBCYXJyaWVyIHsKLQkJcHJpdmF0ZSBmaW5hbCBPYmplY3QgZk11dGV4PSBuZXcgT2JqZWN0KCk7Ci0JCXByaXZhdGUgZmluYWwgaW50IGZQYXJ0aWNpcGFudHM7Ci0JCXByaXZhdGUgZmluYWwgVGhyZWFkIGZNYWluVGhyZWFkOwotCi0JCXByaXZhdGUgaW50IGZXYWl0aW5nPSAwOwotCQlwcml2YXRlIGJvb2xlYW4gZk1haW5UaHJlYWRBcnJpdmVkPSBmYWxzZTsKLQkJcHJpdmF0ZSBib29sZWFuIGZJc0luYWN0aXZlPSBmYWxzZTsKLQotCQlCYXJyaWVyKCkgewotCQkJZlBhcnRpY2lwYW50cz0gMjsKLQkJCWZNYWluVGhyZWFkPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYXdhaXQoKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWlmIChmSXNJbmFjdGl2ZSkKLQkJCQkJcmV0dXJuOwotCi0JCQkJZldhaXRpbmcrKzsKLQotCQkJCWJvb2xlYW4gaXNNYWluVGhyZWFkPSBUaHJlYWQuY3VycmVudFRocmVhZCgpID09IGZNYWluVGhyZWFkOwotCQkJCWlmIChpc01haW5UaHJlYWQpCi0JCQkJCWZNYWluVGhyZWFkQXJyaXZlZD0gdHJ1ZTsKLQotCQkJCWlmIChhbGxBcnJpdmVkKCkpIHsKLQkJCQkJaWYgKCFmTWFpblRocmVhZEFycml2ZWQpIHsKLQkJCQkJCWZXYWl0aW5nLS07Ci0JCQkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihnZXRDbGFzcygpICsgIiBjYW4ndCBqb2luIGJhcnJpZXIgaWYgb25seSB0aGUgbWFpbiB0aHJlYWQgaXMgbWlzc2luZyEiKTsKLQkJCQkJfQotCi0JCQkJCWlmICghaXNNYWluVGhyZWFkKQotCQkJCQkJbm90aWZ5TWFpblRocmVhZCgpOwotCQkJCX0KLQkJCQlpZiAoIWFsbEFycml2ZWQoKSB8fCAhaXNNYWluVGhyZWFkKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlpZiAoIWlzTWFpblRocmVhZCkKLQkJCQkJCQlmTXV0ZXgud2FpdCgpOwotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJZk11dGV4LndhaXQoNTAwMCk7IC8vIGRvbid0IHdhaXQgZm9yZXZlciBmb3IgYmFkIHJlY29uY2lsZXJzCi0JCQkJCQkJaWYgKCFhbGxBcnJpdmVkKCkpCi0JCQkJCQkJCWZhaWwoInJlY29uY2lsZXIgbmV2ZXIgcmFuIGluIDUgc2Vjb25kcyIpOwotCQkJCQkJfQotCQkJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyB0aHJlYWRzIG11c3Qgbm90IGJlIGludGVycnVwdGVkCi0JCQkJCQl0aHJvdyBuZXcgRXJyb3IoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXByaXZhdGUgYm9vbGVhbiBhbGxBcnJpdmVkKCkgewotCQkJcmV0dXJuIGZXYWl0aW5nID09IGZQYXJ0aWNpcGFudHM7Ci0JCX0KLQotCQlwcml2YXRlIHZvaWQgbm90aWZ5TWFpblRocmVhZCgpIHsKLQkJCWZNdXRleC5ub3RpZnkoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdha2VBbGwoKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWZXYWl0aW5nPSAwOwotCQkJCWZNYWluVGhyZWFkQXJyaXZlZD0gZmFsc2U7Ci0JCQkJZk11dGV4Lm5vdGlmeUFsbCgpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2h1dGRvd24oKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWZJc0luYWN0aXZlPSB0cnVlOwotCQkJCWZNdXRleC5ub3RpZnlBbGwoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgQWNjZXNzb3IgZkFjY2Vzc29yOwotCXByaXZhdGUgQmFycmllciBmQmFycmllcjsKLQlwcml2YXRlIExpc3QgZkNhbGxMb2c7Ci0JcHJpdmF0ZSBJVGV4dFZpZXdlciBmVmlld2VyOwotCXByb3RlY3RlZCBBYnN0cmFjdFJlY29uY2lsZXIgZlJlY29uY2lsZXI7Ci0JcHJpdmF0ZSBEb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJZkJhcnJpZXI9IG5ldyBCYXJyaWVyKCk7Ci0JCWZDYWxsTG9nPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KG5ldyBBcnJheUxpc3QoKSk7Ci0JCWZSZWNvbmNpbGVyPSBuZXcgQWJzdHJhY3RSZWNvbmNpbGVyKCkgewotCQkJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsUHJvY2VzcygpIHsKLQkJCQkJCWZDYWxsTG9nLmFkZCgiaW5pdGlhbFByb2Nlc3MiKTsKLQkJCQkJCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcyhEaXJ0eVJlZ2lvbiBkaXJ0eVJlZ2lvbikgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJwcm9jZXNzIik7Ci0JCQkJCQlmQmFycmllci5hd2FpdCgpOwotCQkJCQl9Ci0JCQkJCXByb3RlY3RlZCB2b2lkIHJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQoSURvY3VtZW50IG5ld0RvY3VtZW50KSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJhYm91dFRvQmVSZWNvbmNpbGVkIik7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlclJlc2V0KCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJyZWNvbmNpbGVyUmVzZXQiKTsKLQkJCQkJfQotCQkJCQlwdWJsaWMgSVJlY29uY2lsaW5nU3RyYXRlZ3kgZ2V0UmVjb25jaWxpbmdTdHJhdGVneShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQl9Ci0JCQkJfTsKLQkJZlJlY29uY2lsZXIuc2V0SXNJbmNyZW1lbnRhbFJlY29uY2lsZXIoZmFsc2UpOwotCQlmUmVjb25jaWxlci5zZXREZWxheSg1MCk7IC8vIG1ha2UgdGVzdHMgcnVuIGZhc3RlcgotCi0JCWZWaWV3ZXI9IG5ldyBUZXN0VGV4dFZpZXdlcigpOwotCQlmUmVjb25jaWxlci5pbnN0YWxsKGZWaWV3ZXIpOwotCi0JCWZBY2Nlc3Nvcj0gbmV3IEFjY2Vzc29yKGZSZWNvbmNpbGVyLCBBYnN0cmFjdFJlY29uY2lsZXIuY2xhc3MpOwotCQlPYmplY3Qgb2JqZWN0PSBmQWNjZXNzb3IuZ2V0KCJmVGhyZWFkIik7Ci0JCWZBY2Nlc3Nvcj0gbmV3IEFjY2Vzc29yKG9iamVjdCwgb2JqZWN0LmdldENsYXNzKCkpOwotCX0KLQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkJhcnJpZXIuc2h1dGRvd24oKTsKLQkJZlJlY29uY2lsZXIudW5pbnN0YWxsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxSZWNvbmNpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQkvLyBpbml0aWFsbHkgdGhlIHJlY29uY2lsZXIgaXMgbmVpdGhlciBhY3RpdmUgbm9yIGRpcnR5Ci0JCS8vIFhYWCBzaG91bGRuJ3QgaXQgYmUgZGlydHk/Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCi0JCS8vIHNldCB1cCBpbml0aWFsIGRvY3VtZW50Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJmb28iKTsKLQkJZlZpZXdlci5zZXREb2N1bWVudChmRG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoImFib3V0VG9CZVJlY29uY2lsZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygiaW5pdGlhbFByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQkvLyBYWFggc2hvdWxkbid0IGl0IGJlIGRpcnR5IGFuZCBhY3RpdmUgZHVyaW5nIGluaXRpYWxQcm9jZXNzPwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIHdhaXQgdW50aWwgY2xlYW4KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5aW5nV2hlbkNsZWFuKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCWRpcnR5KCk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQotCQlmQmFycmllci5hd2FpdCgpOwotCQlhc3NlcnRFcXVhbHMoInByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRUcnVlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRUcnVlKGlzRGlydHkoKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQotCQkvLyB3YWl0IHVudGlsIGNsZWFuCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGRpcnR5KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50LnJlcGxhY2UoMCwwLCJiYXIiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eWluZ1doZW5SdW5uaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydFRydWUoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUoaXNEaXJ0eSgpKTsKLQkJZkNhbGxMb2cuY2xlYXIoKTsKLQkJZGlydHkoKTsKLQkJLy8gbm8gYWJvdXRUb0JlUmVjb25jaWxlZCBzaW5jZSB0aGUgcmVjb25jaWxlciBpcyBzdGlsbCBydW5uaW5nCi0JCS8vIHdoZW4gdGhlIHNlY29uZCBlZGl0aW9uIGNvbWVzIGluCi0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdXaGVuQ2xlYW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gZGlydHkgYWdhaW4KLQkJZGlydHkoKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIGNhbmNlbAotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQkJcG9sbFVudGlsSW5hY3RpdmUoKTsKLQkJYXNzZXJ0VHJ1ZShmQ2FsbExvZy5pc0VtcHR5KCkpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJLy8gWFhYIGZhaWxzIHNpbmNlIEFic3RyYWN0UmVjb25jaWxlciBkb2VzIG5vdCB1cGRhdGUgc3RhdGUgYmVmb3JlIGxlYXZpbmcKLS8vCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOyAvLyBmYWlscwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYW5jZWxsaW5nV2hlblJ1bm5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gZGlydHkgYW5kIGNhbmNlbAotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCQlwb2xsVW50aWxJbmFjdGl2ZSgpOwotCQlhc3NlcnRUcnVlKGZDYWxsTG9nLmlzRW1wdHkoKSk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQkvLyBYWFggZmFpbHMgc2luY2UgQWJzdHJhY3RSZWNvbmNpbGVyIGRvZXMgbm90IHVwZGF0ZSBzdGF0ZSBiZWZvcmUgbGVhdmluZwotLy8JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2luZ0RvY3VtZW50V2hlbkNsZWFuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gcmVwbGFjZQotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmVmlld2VyLnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgiYmFyIikpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoImFib3V0VG9CZVJlY29uY2lsZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJSZXNldCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjaW5nRG9jdW1lbnRXaGVuUnVubmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhbmQgcmVwbGFjZQotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmVmlld2VyLnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgiYmFyIikpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJSZXNldCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydFRydWUoZkNhbGxMb2cuaXNFbXB0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIFhYWCB0aGlzIGZhaWxzLCB3aGljaCBpcyBhIGJ1ZyAtIHJlcGxhY2luZyB0aGUgZG9jdW1lbnQgc2hvdWxkCi0JCS8vIGNhbmNlbCB0aGUgcHJvZ3Jlc3MgbW9uaXRvcgotLy8JCWZCYXJyaWVyLmF3YWl0KCk7Ci0vLwkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLS8vCQlmQmFycmllci53YWtlQWxsKCk7Ci0JfQotCi0Jdm9pZCBpbnN0YWxsRG9jdW1lbnQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiZm9vIik7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQoZkRvY3VtZW50KTsKLQotCQkvLyBpbml0aWFsIHByb2Nlc3MKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JfQotCi0Jdm9pZCBwb2xsVW50aWxDbGVhbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIHdhaXQgZm9yIHJlY29uY2lsZXIgdG8gYmVjb21lIGNsZWFuCi0JCWxvbmcgc3RhcnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl3aGlsZSAoaXNEaXJ0eSgpKSB7Ci0JCQlsb25nIGN1cnJlbnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJaWYgKGN1cnJlbnQgPiBzdGFydCArIDUwMDApCi0JCQkJZmFpbCgid2FpdGVkID4gNXMgZm9yIHJlY29uY2lsZXIgdG8gY29tcGxldGUiKTsKLQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCXdhaXQoNTApOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBwb2xsVW50aWxJbmFjdGl2ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIHdhaXQgZm9yIHJlY29uY2lsZXIgdG8gYmVjb21lIGNsZWFuCi0JCWxvbmcgc3RhcnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl3aGlsZSAoaXNBY3RpdmUoKSkgewotCQkJbG9uZyBjdXJyZW50PSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCWlmIChjdXJyZW50ID4gc3RhcnQgKyA1MDAwKQotCQkJCWZhaWwoIndhaXRlZCA+IDVzIGZvciByZWNvbmNpbGVyIHRvIGNvbXBsZXRlIik7Ci0JCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCQl3YWl0KDUwKTsKLQkJCX0KLQkJfQotCX0KLQotCWJvb2xlYW4gaXNBY3RpdmUoKSB7Ci0JCU9iamVjdCBib29sPSBmQWNjZXNzb3IuaW52b2tlKCJpc0FjdGl2ZSIsIG51bGwpOwotCQlyZXR1cm4gKChCb29sZWFuKSBib29sKS5ib29sZWFuVmFsdWUoKTsKLQl9Ci0KLQlib29sZWFuIGlzRGlydHkoKSB7Ci0JCU9iamVjdCBib29sPSBmQWNjZXNzb3IuaW52b2tlKCJpc0RpcnR5IiwgbnVsbCk7Ci0JCXJldHVybiAoKEJvb2xlYW4pIGJvb2wpLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9yZWNvbmNpbGVyL1JlY29uY2lsZXJUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmRmZTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5yZWNvbmNpbGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWNvbmNpbGVyVGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlPSBuZXcgVGVzdFN1aXRlKCJUZXN0IFN1aXRlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucmVjb25jaWxlciIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEFic3RyYWN0UmVjb25jaWxlclRlc3QuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzExNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRGVmYXVsdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVBhcnRpdGlvblRva2VuU2Nhbm5lcjsKLQotcHVibGljIGNsYXNzIERlZmF1bHRQYXJ0aXRpb25lclRlc3QgZXh0ZW5kcyBGYXN0UGFydGl0aW9uZXJUZXN0IHsKLQlwcm90ZWN0ZWQgSURvY3VtZW50UGFydGl0aW9uZXIgY3JlYXRlUGFydGl0aW9uZXIoSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdFBhcnRpdGlvbmVyKHNjYW5uZXIsIG5ldyBTdHJpbmdbXSB7IERFRkFVTFQsIENPTU1FTlQgfSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXMuRmFzdFBhcnRpdGlvbmVyVGVzdCN0ZXN0UFIxMzA5MDAoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQUjEzMDkwMCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1ZzEzMDkwMCBub3QgZml4ZWQgaW4gRGVmYXVsdFBhcnRpdGlvbmVyIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclplcm9MZW5ndGhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMTc5MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQYXJ0aXRpb25Ub2tlblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLk11bHRpTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UPSAiY29tbWVudCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFQ9IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2M7Ci0JcHJpdmF0ZSBGYXN0UGFydGl0aW9uZXIgZlBhcnRpdGlvbmVyOwotCi0JcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0JCWZEb2M9IG5ldyBEb2N1bWVudCgpOwotCQlJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCkgewotCQkJewotCQkJCUlUb2tlbiBjb21tZW50PSBuZXcgVG9rZW4oQ09NTUVOVCk7Ci0JCQkJSVByZWRpY2F0ZVJ1bGVbXSBydWxlcz0gbmV3IElQcmVkaWNhdGVSdWxlW10geyBuZXcgTXVsdGlMaW5lUnVsZSgiLyoiLCAiKi8iLCBjb21tZW50KSB9OwotCQkJCXNldFByZWRpY2F0ZVJ1bGVzKHJ1bGVzKTsKLQotCQkJfQotCQl9OwotCQlmUGFydGl0aW9uZXI9IG5ldyBGYXN0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQkJZkRvYy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGZQYXJ0aXRpb25lcik7Ci0JCWZQYXJ0aXRpb25lci5jb25uZWN0KGZEb2MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZUVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmcoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdFbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ0VtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VCZWZvcmVCb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMiwgMzgsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMzksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTMsIDI2LCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlQWZ0ZXJCb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxNCwgNDAsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMxKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygwLCBmRG9jLmdldExlbmd0aCgpLCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludFtdIG9mZnNldHMsIFN0cmluZyBzdGFydFR5cGUpIHsKLQkJSVR5cGVkUmVnaW9uW10gcmVnaW9ucz0gZlBhcnRpdGlvbmVyLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCB0cnVlKTsKLQotCQlTdHJpbmcgdHlwZT0gc3RhcnRUeXBlOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IHN0YXJ0T2Zmc2V0OwotCi0JCWFzc2VydEVxdWFscyhvZmZzZXRzLmxlbmd0aCArIDEsIHJlZ2lvbnMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgY3VycmVudE9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZW5kT2Zmc2V0IDogb2Zmc2V0c1tpXTsKLQkJCUlUeXBlZFJlZ2lvbiByZWdpb249IHJlZ2lvbnNbaV07Ci0KLQkJCWFzc2VydFR5cGVkUmVnaW9uKHJlZ2lvbiwgcHJldmlvdXNPZmZzZXQsIGN1cnJlbnRPZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBjdXJyZW50T2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvbihwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzT3BlblR5cGUoU3RyaW5nIHR5cGUpIHsKLQkJcmV0dXJuIHR5cGUuZXF1YWxzKERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvbihpbnQgb2Zmc2V0LCBpbnQgaW5jbHVzaXZlRW5kLCBTdHJpbmcgdHlwZSkgewotCQlpbnQgZnJvbT0gaXNPcGVuVHlwZSh0eXBlKSA/IG9mZnNldCA6IG9mZnNldCArIDE7Ci0JCWludCB0bz0gaXNPcGVuVHlwZSh0eXBlKSA/IGluY2x1c2l2ZUVuZCA6IGluY2x1c2l2ZUVuZCAtIDE7Ci0JCWZvciAoaW50IGk9IGZyb207IGkgPD0gdG87IGkrKykgewotCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gZlBhcnRpdGlvbmVyLmdldFBhcnRpdGlvbihpLCB0cnVlKTsKLQkJCWFzc2VydFR5cGVkUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0LCBpbmNsdXNpdmVFbmQsIHR5cGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydFR5cGVkUmVnaW9uKElUeXBlZFJlZ2lvbiByZWdpb24sIGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWFzc2VydEVxdWFscyhvZmZzZXQsIHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCWFzc2VydEVxdWFscyhpbmNsdXNpdmVFbmQgLSBvZmZzZXQsIHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyh0eXBlLCByZWdpb24uZ2V0VHlwZSgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0RXF1YWxQYXJ0aXRpb25UeXBlKGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBpc09wZW5UeXBlKHR5cGUpID8gb2Zmc2V0IDogb2Zmc2V0ICsgMTsKLQkJaW50IHRvPSBpc09wZW5UeXBlKHR5cGUpID8gaW5jbHVzaXZlRW5kIDogaW5jbHVzaXZlRW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHModHlwZSwgZlBhcnRpdGlvbmVyLmdldENvbnRlbnRUeXBlKGksIHRydWUpKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjcwMTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0Zhc3RQYXJ0aXRpb25lclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5GYXN0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUGFydGl0aW9uVG9rZW5TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVByZWRpY2F0ZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5NdWx0aUxpbmVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlNpbmdsZUxpbmVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBGYXN0UGFydGl0aW9uZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUVOVD0gImNvbW1lbnQiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFQ9IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2M7Ci0JcHJpdmF0ZSBJRG9jdW1lbnRQYXJ0aXRpb25lciBmUGFydGl0aW9uZXI7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJZkRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBNdWx0aUxpbmVSdWxlKCIvKiIsICIqLyIsIGNvbW1lbnQpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCi0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gY3JlYXRlUGFydGl0aW9uZXIoc2Nhbm5lcik7Ci0JCWZEb2Muc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihmUGFydGl0aW9uZXIpOwotCQlmUGFydGl0aW9uZXIuY29ubmVjdChmRG9jKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSURvY3VtZW50UGFydGl0aW9uZXIgY3JlYXRlUGFydGl0aW9uZXIoSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXJldHVybiBuZXcgRmFzdFBhcnRpdGlvbmVyKHNjYW5uZXIsIG5ldyBTdHJpbmdbXSB7IERFRkFVTFQsIENPTU1FTlQgfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbigpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbkVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25FbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZUVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGVFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmcoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUJlZm9yZUJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTIsIDM4LCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlT25Cb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMzksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMjYsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VBZnRlckJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTQsIDQwLCBvZmZzZXRzLCBDT01NRU5UKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlSW5Cb3VuZGFyaWVzMSgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBSMTAxMDE0KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5zZXQoCi0JCQkJInBhY2thZ2UgcHIxMDEwMTQ7XG4iICsKLQkJCQkiXG4iICsKLQkJCQkiY2xhc3MgWCB7XG4iICsKLQkJCQkiU3RyaW5nIHM9IFxuIiArCi0JCQkJIgkvKmZvbyovO1xuIiArCi0JCQkJIn1cbiIpOwotCi0JCWludFtdIG9mZnNldHM9IHs0MSwgNDh9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0KLQkJZkRvYy5yZXBsYWNlKDQwLCA4LCAiCS8qZm9vKi8iKTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQUjEzMDkwMCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmUGFydGl0aW9uZXIuZGlzY29ubmVjdCgpOwotCQlJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCkgewotCQkJewotCQkJCUlUb2tlbiBjb21tZW50PSBuZXcgVG9rZW4oQ09NTUVOVCk7Ci0JCQkJSVByZWRpY2F0ZVJ1bGVbXSBydWxlcz0gbmV3IElQcmVkaWNhdGVSdWxlW10geyBuZXcgU2luZ2xlTGluZVJ1bGUoIiMiLCBudWxsLCBjb21tZW50LCAoY2hhcikgMCwgdHJ1ZSwgZmFsc2UpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCQkJfQotCQl9OwotCQlmUGFydGl0aW9uZXI9IGNyZWF0ZVBhcnRpdGlvbmVyKHNjYW5uZXIpOwotCQlmRG9jLnNldERvY3VtZW50UGFydGl0aW9uZXIoZlBhcnRpdGlvbmVyKTsKLQkJZlBhcnRpdGlvbmVyLmNvbm5lY3QoZkRvYyk7Ci0KLQkJZkRvYy5zZXQoIiMiKTsKLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0KLSAgICB9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDAsIGZEb2MuZ2V0TGVuZ3RoKCksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnRbXSBvZmZzZXRzLCBTdHJpbmcgc3RhcnRUeXBlKSB7Ci0JCUlUeXBlZFJlZ2lvbltdIHJlZ2lvbnM9IGZQYXJ0aXRpb25lci5jb21wdXRlUGFydGl0aW9uaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7Ci0KLQkJU3RyaW5nIHR5cGU9IHN0YXJ0VHlwZTsKLQkJaW50IHByZXZpb3VzT2Zmc2V0PSBzdGFydE9mZnNldDsKLQotCQlpbnQgaj0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgY3VycmVudE9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZW5kT2Zmc2V0IDogb2Zmc2V0c1tpXTsKLQkJCWlmIChjdXJyZW50T2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQgIT0gMCkgeyAvLyBkb24ndCBkbyBlbXB0eSBwYXJ0aXRpb25zCi0JCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gcmVnaW9uc1tqKytdOwotCi0JCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBwcmV2aW91c09mZnNldCwgY3VycmVudE9mZnNldCwgdHlwZSk7Ci0JCQl9Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IGN1cnJlbnRPZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUocHJldmlvdXNPZmZzZXQsIG9mZnNldCwgdHlwZSk7Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IG9mZnNldDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvbihwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uKGludCBvZmZzZXQsIGludCBlbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBvZmZzZXQ7Ci0JCWludCB0bz0gZW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlJVHlwZWRSZWdpb24gcmVnaW9uPSBmUGFydGl0aW9uZXIuZ2V0UGFydGl0aW9uKGkpOwotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBvZmZzZXQsIGVuZCwgdHlwZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0VHlwZWRSZWdpb24oSVR5cGVkUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGVuZCAtIG9mZnNldCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHR5cGUsIHJlZ2lvbi5nZXRUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUoaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IG9mZnNldDsKLQkJaW50IHRvPSBlbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyh0eXBlLCBmUGFydGl0aW9uZXIuZ2V0Q29udGVudFR5cGUoaSkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvUnVsZXNUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkZWI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgY2xhc3MgUnVsZXNUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoCi0JCQkJIlRlc3QgU3VpdGUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlcyIpOwotCQkvLyAkSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShGYXN0UGFydGl0aW9uZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKERlZmF1bHRQYXJ0aXRpb25lclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoV29yZFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFNjYW5uZXJDb2x1bW5UZXN0LmNsYXNzKTsKLQkJLy8gJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9TY2FubmVyQ29sdW1uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjBjOGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5CdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRTY2FubmVyOwotCi0KLS8qKgotICogQHNpbmNlIDMuNAotICovCi1wdWJsaWMgY2xhc3MgU2Nhbm5lckNvbHVtblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIElEb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgic2Nhbm5lciB0ZXN0Iik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50PSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdWxlQmFzZWRTY2FubmVyQ29sdW1uUmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uUmVhZChuZXcgUnVsZUJhc2VkU2Nhbm5lcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UnVsZUJhc2VkU2Nhbm5lckNvbHVtblVucmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKG5ldyBSdWxlQmFzZWRTY2FubmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXJDb2x1bW5SZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5SZWFkKG5ldyBCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXIoMTAwKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lckNvbHVtblVucmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKG5ldyBCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXIoMTAwKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIF90ZXN0U2Nhbm5lckNvbHVtblJlYWQoUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZkRvY3VtZW50LCAwLCAxMCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCdzJywgc2Nhbm5lci5yZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCXNjYW5uZXIudW5yZWFkKCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKFJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcikgewotCQlzY2FubmVyLnNldFJhbmdlKGZEb2N1bWVudCwgMCwgMTApOwotCQlhc3NlcnRFcXVhbHMoMCwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCWFzc2VydEVxdWFscygncycsIHNjYW5uZXIucmVhZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCQlzY2FubmVyLnVucmVhZCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9Xb3JkUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjVlY2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0QXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JV29yZERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuUGF0dGVyblJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRTY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Xb3JkUnVsZTsKLQotLyoqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBjbGFzcyBXb3JkUnVsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFNpbXBsZVdvcmREZXRlY3RvciBpbXBsZW1lbnRzIElXb3JkRGV0ZWN0b3IgewotCQlwdWJsaWMgYm9vbGVhbiBpc1dvcmRTdGFydChjaGFyIGMpIHsKLQkJCXJldHVybiAhQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzV29yZFBhcnQoY2hhciBjKSB7Ci0JCQlyZXR1cm4gIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYyk7Ci0JCX0KLQl9Ci0KLQotCS8qCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2MzExNgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNjMxMTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVdvcmREZXRlY3RvciBkZXRlY3Rvcj0gbmV3IElXb3JkRGV0ZWN0b3IoKSB7Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzV29yZFBhcnQoY2hhciBjKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzV29yZFN0YXJ0KGNoYXIgYykgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCi0JCX07Ci0KLQkJV29yZFJ1bGUgcnVsZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBuZXcgVG9rZW4odGhpcykpOwotCi0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7IHJ1bGUgfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KCksIDAsIDApOwotCi0JCUlUb2tlbiB0b2tlbj0gbnVsbDsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlICh0b2tlbiAhPSBUb2tlbi5FT0YgJiYgaSsrIDwgMTAwMCkKLQkJCXRva2VuPSBzY2FubmVyLm5leHRUb2tlbigpOwotCi0JCWFzc2VydFRydWUoaSA8IDEwMDApOwotCi0JfQotCi0JLyoKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzU1Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE0NDM1NSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJV29yZERldGVjdG9yIGRldGVjdG9yPSBuZXcgU2ltcGxlV29yZERldGVjdG9yKCk7Ci0KLQkJU3RyaW5nIGRlZmF1bHRUb2tlblN0cmluZz0gImRlZmF1bHRUb2tlbiI7Ci0JCVRva2VuIGRlZmF1bHRUb2tlbj0gbmV3IFRva2VuKGRlZmF1bHRUb2tlblN0cmluZyk7Ci0KLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ05vcm1hbD0gIlRlc3RUb2tlblN0cmluZyI7Ci0JCVN0cmluZyB0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbj0gIlRlc3RUT0tFTlN0cmluZyI7Ci0JCVN0cmluZyB0ZXN0VG9rZW5TdHJpbmdDb21wbGV0ZWx5RGlmZmVyZW50PSAiWFhYIjsKLQkJVG9rZW4gbm9ybWFsVG9rZW49IG5ldyBUb2tlbih0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpOwotCi0JCVdvcmRSdWxlIHJ1bGU9IG5ldyBXb3JkUnVsZShkZXRlY3RvciwgZGVmYXVsdFRva2VuLCB0cnVlKTsKLQkJcnVsZS5hZGRXb3JkKHRlc3RUb2tlblN0cmluZ05vcm1hbCwgbm9ybWFsVG9rZW4pOwotCi0JCS8vIHNjZW5hcmlvIDEKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyAoIlRlc3RUb2tlblN0cmluZyIpCi0JCS8vIHBvc3Q6IGV4cGVjdCB0aGUgbm9ybWFsIHRva2VuIHRvIGJlIHJldHVybmVkCi0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpLCAwLCB0ZXN0VG9rZW5TdHJpbmdOb3JtYWwubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpKTsKLQotCQkvLyBzY2VuYXJpbyAyCi0JCS8vIHByZTogcGFzcyBpbiBhIG5vcm1hbCBzdHJpbmcgYnV0IGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbiAoIlRlc3RUT0tFTlN0cmluZyIpCi0JCS8vIHBvc3Q6IGV4cGVjdCB0aGUgbm9ybWFsIHRva2VuIHRvIGJlIHJldHVybmVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGV9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nRGlmZmVyZW50Q2FwaXRhbGl6YXRpb24pLCAwLCB0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbi5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDMKLQkJLy8gcHJlOiBwYXNzIGluIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RyaW5nICgiWFhYIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBkZWZhdWx0IHRva2VuIHRvIGJlIHJldHVybmVkIGJlY2F1c2UgdGhlIHN0cmluZyBjYW4ndCBiZSBtYXRjaGVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGV9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nQ29tcGxldGVseURpZmZlcmVudCksIDAsIHRlc3RUb2tlblN0cmluZ0NvbXBsZXRlbHlEaWZmZXJlbnQubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyhkZWZhdWx0VG9rZW5TdHJpbmcpKTsKLQotCQlXb3JkUnVsZSBydWxlV2l0aG91dElnbm9yZUNhc2U9IG5ldyBXb3JkUnVsZShkZXRlY3RvciwgZGVmYXVsdFRva2VuKTsKLQkJcnVsZVdpdGhvdXRJZ25vcmVDYXNlLmFkZFdvcmQodGVzdFRva2VuU3RyaW5nTm9ybWFsLCBub3JtYWxUb2tlbik7Ci0KLQkJLy8gc2NlbmFyaW8gNAotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nICgiVGVzdFRva2VuU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZVdpdGhvdXRJZ25vcmVDYXNlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ05vcm1hbCksIDAsIHRlc3RUb2tlblN0cmluZ05vcm1hbC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDUKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyBidXQgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uICgiVGVzdFRPS0VOU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBkZWZhdWx0IHRva2VuIHRvIGJlIHJldHVybmVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGVXaXRob3V0SWdub3JlQ2FzZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbiksIDAsIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHMoZGVmYXVsdFRva2VuU3RyaW5nKSk7Ci0JfQotCi0JLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3NTcxMgotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNzU3MTJfMSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVsZVtdIHJ1bGVzPSBuZXcgSVJ1bGVbMl07Ci0KLQkJSVRva2VuIHN0ZXBUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVBhdHRlcm5SdWxlIHN0ZXBSdWxlPSBuZXcgUGF0dGVyblJ1bGUoIigoKCIsICIpIiwgc3RlcFRva2VuLCAoY2hhcikgMCxmYWxzZSk7Ci0JCXN0ZXBSdWxlLnNldENvbHVtbkNvbnN0cmFpbnQoLTEpOwotCQlydWxlc1sxXT0gc3RlcFJ1bGU7Ci0KLQkJSVRva2VuIHRpdGxlVG9rZW49IG5ldyBUb2tlbihuZXcgVGV4dEF0dHJpYnV0ZShudWxsLCBudWxsLCBTV1QuQk9MRCkpOwotCQlXb3JkUnVsZSB3b3JkUnVsZT0gbmV3IFdvcmRSdWxlKG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKSk7Ci0JCXdvcmRSdWxlLmFkZFdvcmQoIigoIiwgdGl0bGVUb2tlbik7Ci0JCXJ1bGVzWzBdPSB3b3JkUnVsZTsKLQotCQlJRG9jdW1lbnQgZG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiKCgoIFxuKChcbi0gQ2hlZXNlXG4tIFdpbmUiKTsKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKHJ1bGVzKTsKLQkJc2Nhbm5lci5zZXRSYW5nZShkb2N1bWVudCwgMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCi0JCUlUb2tlbiBkZWZhdWx0VG9rZW49IG5ldyBUb2tlbih0aGlzKTsKLQkJc2Nhbm5lci5zZXREZWZhdWx0UmV0dXJuVG9rZW4oZGVmYXVsdFRva2VuKTsKLQotCQlJVG9rZW4gdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUodGl0bGVUb2tlbiwgdG9rZW4pOwotCi0JfQotCi0JLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3NTcxMgotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNzU3MTJfMigpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVsZVtdIHJ1bGVzPSBuZXcgSVJ1bGVbMl07Ci0KLQkJSVRva2VuIHN0ZXBUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVBhdHRlcm5SdWxlIHN0ZXBSdWxlPSBuZXcgUGF0dGVyblJ1bGUoIigoKCIsICIpIiwgc3RlcFRva2VuLCAoY2hhcikgMCxmYWxzZSk7Ci0JCXN0ZXBSdWxlLnNldENvbHVtbkNvbnN0cmFpbnQoLTEpOwotCQlydWxlc1sxXT0gc3RlcFJ1bGU7Ci0KLQkJSVRva2VuIHRpdGxlVG9rZW49IG5ldyBUb2tlbihuZXcgVGV4dEF0dHJpYnV0ZShudWxsLCBudWxsLCBTV1QuQk9MRCkpOwotCQlXb3JkUnVsZSB3b3JkUnVsZT0gbmV3IFdvcmRSdWxlKG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKSk7Ci0JCXdvcmRSdWxlLmFkZFdvcmQoIigoIiwgdGl0bGVUb2tlbik7Ci0JCXJ1bGVzWzBdPSB3b3JkUnVsZTsKLQotCQlJRG9jdW1lbnQgZG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiKChcbigoXG4tIENoZWVzZVxuLSBXaW5lIik7Ci0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhydWxlcyk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZG9jdW1lbnQsIDAsIGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQotCQlJVG9rZW4gZGVmYXVsdFRva2VuPSBuZXcgVG9rZW4odGhpcyk7Ci0JCXNjYW5uZXIuc2V0RGVmYXVsdFJldHVyblRva2VuKGRlZmF1bHRUb2tlbik7Ci0KLQkJSVRva2VuIHRva2VuPSBzY2FubmVyLm5leHRUb2tlbigpOwotCQlhc3NlcnRTYW1lKHRpdGxlVG9rZW4sIHRva2VuKTsKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4NjU4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIFRlc3RzCi1lZGl0b3IubmFtZS4wID0gR2VuZXJpYyBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9yCi1jYXRlZ29yeS5uYW1lLjAgPSBTU0UgVGVzdGluZwotdmlldy5uYW1lLjAgPSBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCBNYW5hZ2VtZW50IFRlc3Rlcgotdmlldy5uYW1lLjEgPSBBY3Rpb24gVGVzdGVyCi1hY3Rpb24ubGFiZWwuMCA9IG9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMgVGVzdCBBY3Rpb24KLWFjdGlvbi5sYWJlbC4xID0gTWFrZSBSZWFkLU9ubHkKLWFjdGlvbi5sYWJlbC4yID0gQ2xlYXIgYWxsIFJlYWQtT25seQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTY1N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotCQkJbmFtZT0iJWVkaXRvci5uYW1lLjAiCi0JCQlleHRlbnNpb25zPSJwcm9qZWN0LCBjbGFzc3BhdGgsIHdlYnNldHRpbmdzLCBzZXJ2ZXJQcmVmZXJlbmNlIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiCi0JCQljb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3IiCi0JCQlzeW1ib2xpY0ZvbnROYW1lPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gRWRpdG9yIGFjdGlvbnNldHMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0UGFydEFzc29jaWF0aW9ucyI+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIj4KLQkJCTxwYXJ0Ci0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCQk8L3BhcnQ+Ci0JCTwvYWN0aW9uU2V0UGFydEFzc29jaWF0aW9uPgotCQk8YWN0aW9uU2V0UGFydEFzc29jaWF0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiPgotCQkJPHBhcnQKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJCTwvcGFydD4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTxjYXRlZ29yeQotCQkJbmFtZT0iJWNhdGVnb3J5Lm5hbWUuMCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIj4KLQkJPC9jYXRlZ29yeT4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3Ij4KLQkJPC92aWV3PgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4xIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5BY3Rpb25UZXN0VmlldyIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkFjdGlvblRlc3RWaWV3Ij4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLkVkaXRvckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0Ij4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4wIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RBY3Rpb25EZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMSIgLz4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4xIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0LjIiIC8+Ci0JCQk8YWN0aW9uCi0JCQkJbGFiZWw9IiVhY3Rpb24ubGFiZWwuMiIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5DbGVhclJlYWRPbmx5RGVsZWdhdGUiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0LjIiIC8+Ci0JCTwvdmlld2VyQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPHByb3Zpc2lvbmFsQ29uZmlndXJhdGlvbgotCQkJdHlwZT0ibGluZXN0eWxlcHJvdmlkZXIiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5UZXN0TGluZVN0eWxlUHJvdmlkZXIiCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLlNDUklQVC5sYW5ndWFnZS5CTFVFIiAvPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULnR5cGUuVEVYVC9CTFVFIiAvPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2UuanN0LmpzcC5TQ1JJUFQuQkxVRSIgLz4KLQk8L2V4dGVuc2lvbj4KLQkKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmYyOWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQWN0aW9uVGVzdFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqIEEgdmlldyB0byBoYW5nIGFjdGlvbnMgb2ZmIG9mIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYXQgYXJiaXRyYXJ5IHRpbWVzLgotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uVGVzdFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0KLQlwcml2YXRlIGNsYXNzIENvbXBvbmVudFZpZXdlciBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCAmJiAhZlNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgZlNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJCWlmIChzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKLQkJCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCQlJVmlydHVhbFJlc291cmNlW10gdmlydHVhbFJlc291cmNlcyA9IENvbXBvbmVudENvcmUuY3JlYXRlUmVzb3VyY2VzKHJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQkJCS8vIE9ubHkgcmV0dXJuIHJlc3VsdHMgZm9yIEZsZXhpYmxlIHByb2plY3RzCi0JCQkJCWlmICh2aXJ0dWFsUmVzb3VyY2VzICE9IG51bGwpIHsKLQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmlydHVhbFJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2aXJ0dWFsUmVzb3VyY2VzW2ldLmdldENvbXBvbmVudCgpLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBFbXB0eVRleHRTZXR0ZXIgZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgRW1wdHlUZXh0U2V0dGVyKCkgewotCQkJc3VwZXIoIlNldCBUZXh0IEVkaXRvciB0ZXh0IHRvIGVtcHR5Iik7Ci0JCQlzZXRUb29sVGlwVGV4dCgiU2V0IFRleHQgRWRpdG9yIHRleHQgdG8gZW1wdHkgdXNpbmcgc2V0KCkgQVBJIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFZpZXdTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IG51bGw7Ci0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQkJdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yOwotCQkJZWxzZQotCQkJCXRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50KCJFcnJvciBnZXR0aW5nIElEb2N1bWVudC5cbiIpOwotCQkJfQotCQl9Ci0JfQotCi0JQ29udHJvbCBmQ29udHJvbCA9IG51bGw7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgZlNlbGVjdGlvbkxpc3RlbmVyOwotCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCUxpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlhY3Rpb25zLmFkZChuZXcgRW1wdHlUZXh0U2V0dGVyKCkpOwotCQlhY3Rpb25zLmFkZChuZXcgQ29tcG9uZW50Vmlld2VyKCkpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlUZXh0Vmlld2VyIHRleHQgPSBuZXcgVGV4dFZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0LnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgpKTsKLQkJZkNvbnRyb2wgPSB0ZXh0LmdldFRleHRXaWRnZXQoKTsKLQkJdGV4dC5nZXREb2N1bWVudCgpLnNldCgiVXNlIGVpdGhlciB0aGUgdG9vbGJhciBvciB0aGUgbWVudSB0byBydW4geW91ciBhY3Rpb25zXG5cbiIpOwotCX0KLQotCXByaXZhdGUgSVNlbGVjdGlvbkxpc3RlbmVyIGdldFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlpZiAoZlNlbGVjdGlvbkxpc3RlbmVyID09IG51bGwpIHsKLQkJCWZTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQkJCX0KLQkJCX07Ci0JCX0KLQkJcmV0dXJuIGZTZWxlY3Rpb25MaXN0ZW5lcjsKLQl9Ci0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQkJTGlzdCBhY3Rpb25zID0gY3JlYXRlQWN0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQWN0aW9uKSBhY3Rpb25zLmdldChpKSk7Ci0JCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZCgoSUFjdGlvbikgYWN0aW9ucy5nZXQoaSkpOwotCQl9Ci0JCUxpc3QgY29udHJpYnV0aW9ucyA9IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQ29udHJpYnV0aW9uSXRlbSkgY29udHJpYnV0aW9ucy5nZXQoaSkpOwotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQoKElDb250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25zLmdldChpKSk7Ci0JCX0KLQkJc2l0ZS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKGdldFNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCX0KLQotCXZvaWQgcHJpbnQoU3RyaW5nIHMpIHsKLQkJKChTdHlsZWRUZXh0KSBmQ29udHJvbCkuYXBwZW5kKHMpOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmQ29udHJvbCAhPSBudWxsICYmICFmQ29udHJvbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCWZDb250cm9sLnNldEZvY3VzKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NsZWFyUmVhZE9ubHlEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9DbGVhclJlYWRPbmx5RGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1YjQzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NsZWFyUmVhZE9ubHlEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhclJlYWRPbmx5RGVsZWdhdGUgZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUgewotCi0JSVNlbGVjdGlvbiBmU2VsZWN0aW9uID0gbnVsbDsKLQlJRWRpdG9yUGFydCBmRWRpdG9yID0gbnVsbDsKLQotCXB1YmxpYyBDbGVhclJlYWRPbmx5RGVsZWdhdGUoKSB7Ci0JfQotCi0JcHVibGljIENsZWFyUmVhZE9ubHlEZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgQ2xlYXJSZWFkT25seURlbGVnYXRlKFN0cmluZyB0ZXh0LCBJbWFnZURlc2NyaXB0b3IgaW1hZ2UpIHsKLQkJc3VwZXIodGV4dCwgaW1hZ2UpOwotCX0KLQotCXB1YmxpYyBDbGVhclJlYWRPbmx5RGVsZWdhdGUoU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlzdXBlcih0ZXh0LCBzdHlsZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJZkVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudCkgewotCQkJKChJU3RydWN0dXJlZERvY3VtZW50KSBkb2N1bWVudCkuY2xlYXJSZWFkT25seSgwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDJjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlCi0gKiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIGNvbW1vbiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUKLSAqIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiK3ByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5YmUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5FcnJvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQXJyYXlDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc2lzdGFibGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklSZXVzYWJsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuV2l0aE1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRleHQuRWRpdG9yc1VJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklFbGVtZW50U3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklVcGRhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0OwotCi0KLS8qKgotICogQGF1dGhvciBuaXRpbgotICogCi0gKiBBIHZpZXcgdG8gYXNzaXN0IGluIHRlc3Rpbmcgb3V0IFN0cnVjdHVyZWRUZXh0RWRpdG9yJ3MgSUVkaXRvcklucHV0Ci0gKiBoYW5kbGluZy4KLSAqIAotICogUGVybWFuZW50bHkgaW4tcHJvZ3Jlc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogQWRkcyBhbiBJRmlsZUVkaXRvcklucHV0IHRvIHRoZSBsaXN0IG9mIGlucHV0cyB3aXRoIHdoaWNoIHRvIHRlc3QKLQkgKi8KLQljbGFzcyBBZGRGaWxlSW5wdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgQWRkRmlsZUlucHV0QWN0aW9uKCkgewotCQkJc3VwZXIoIkFkZCBGaWxlRWRpdG9ySW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgZGxnID0gbmV3IFJlc291cmNlU2VsZWN0aW9uRGlhbG9nKGZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCksICJDaG9vc2UiKTsKLQkJCWludCByZXR2YWwgPSBkbGcub3BlbigpOwotCQkJaWYgKHJldHZhbCA9PSBXaW5kb3cuT0spIHsKLQkJCQlPYmplY3RbXSBmaWxlcyA9IGRsZy5nZXRSZXN1bHQoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCWZJbnB1dHMuYWRkKG5ldyBGaWxlRWRpdG9ySW5wdXQoKElGaWxlKSBmaWxlc1tpXSkpOwotCQkJCX0KLQkJCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGFuIElTdG9yYWdlRWRpdG9ySW5wdXQgdG8gdGhlIGxpc3Qgb2YgaW5wdXRzIHdpdGggd2hpY2ggdG8gdGVzdAotCSAqLwotCWNsYXNzIEFkZFN0b3JhZ2VJbnB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBBZGRTdG9yYWdlSW5wdXRBY3Rpb24oKSB7Ci0JCQlzdXBlcigiQWRkIFN0b3JhZ2VFZGl0b3JJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlGaWxlRGlhbG9nIGRsZyA9IG5ldyBGaWxlRGlhbG9nKGZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJU3RyaW5nIGZpbGVOYW1lID0gZGxnLm9wZW4oKTsKLQkJCWlmIChmaWxlTmFtZSAhPSBudWxsKSB7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShmaWxlTmFtZSkpKTsKLQkJCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBIYW5kbGVyIGZvciBkb3VibGUtY2xpY2sgCi0JICovCi0JY2xhc3MgRG91YmxlQ2xpY2tMaXN0ZW5lciBpbXBsZW1lbnRzIElEb3VibGVDbGlja0xpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkgewotCQkJbmV3IElucHV0T3BlbkFjdGlvbigpLnJ1bigpOwotCQl9Ci0JfQotCi0JY2xhc3MgRWRpdG9ySW5wdXRMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0JCUlMYWJlbFByb3ZpZGVyIGJhc2VQcm92aWRlciA9IG5ldyBXb3JrYmVuY2hMYWJlbFByb3ZpZGVyKCk7Ci0KLQkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJLy8gbm90IGltcGxlbWVudGVkCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQkJLy8gbm8gbmVlZAotCQl9Ci0KLQkJcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBjb2x1bW5JbmRleCA9PSAwKSB7Ci0JCQkJcmV0dXJuIGJhc2VQcm92aWRlci5nZXRJbWFnZSgoKElGaWxlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldEZpbGUoKSk7Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSAoSUVkaXRvcklucHV0KSBlbGVtZW50OwotCQkJU3RyaW5nIHRleHQgPSBudWxsOwotCQkJc3dpdGNoIChjb2x1bW5JbmRleCkgewotCQkJCWNhc2UgMCA6Ci0JCQkJCXRyeSB7Ci0JCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkJCUlQYXRoIGZ1bGxwYXRoID0gKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldFN0b3JhZ2UoKS5nZXRGdWxsUGF0aCgpOwotCQkJCQkJCXRleHQgPSBmdWxscGF0aCAhPSBudWxsID8gZnVsbHBhdGgudG9TdHJpbmcoKSA6ICgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXROYW1lKCk7Ci0JCQkJCQkJaWYgKCgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5pc0RpcnR5KCkpIHsKLQkJCQkJCQkJdGV4dCA9ICIqIiArIHRleHQ7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCQl0ZXh0ID0gKChJRmlsZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJCX0KLQotCQkJCQlicmVhazsKLQkJCQljYXNlIDEgOgotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkJdGV4dCA9ICJGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQiOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJCQl0ZXh0ID0gIkZpbGVFZGl0b3JJbnB1dCI7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQl0ZXh0ID0gaW5wdXQuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAodGV4dCA9PSBudWxsKQotCQkJCXRleHQgPSAiIjsKLQkJCXJldHVybiB0ZXh0OwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZAotCQl9Ci0JfQotCi0KLQljbGFzcyBGaWxlQmFja2VkU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsKLQkJRmlsZSBmRmlsZSA9IG51bGw7Ci0KLQkJRmlsZUJhY2tlZFN0b3JhZ2UoRmlsZSBmaWxlKSB7Ci0JCQlzdXBlcigpOwotCQkJZkZpbGUgPSBmaWxlOwotCQl9Ci0KLQkJYm9vbGVhbiBleGlzdHMoKSB7Ci0JCQlyZXR1cm4gZkZpbGUuZXhpc3RzKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQotCQkgKi8KLQkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXRDb250ZW50cygpCi0JCSAqLwotCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0Q29udGVudHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQlJbnB1dFN0cmVhbSBjb250ZW50cyA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmRmlsZSk7Ci0JCQkJQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKChpbnQpIGZGaWxlLmxlbmd0aCgpKTsKLQkJCQlieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQl3aGlsZSAoY29udGVudHMuYXZhaWxhYmxlKCkgPiAwKSB7Ci0JCQkJCWludCBjb3VudCA9IGNvbnRlbnRzLnJlYWQoYnl0ZXMpOwotCQkJCQlidWZmZXIucHV0KGJ5dGVzLCAwLCBjb3VudCk7Ci0JCQkJfQotCQkJCWNvbnRlbnRzLmNsb3NlKCk7Ci0KLQkJCQljb250ZW50cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIuYXJyYXkoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKTsKLQkJCX0KLQkJCXJldHVybiBjb250ZW50czsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0RnVsbFBhdGgoKQotCQkgKi8KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgewotCQkJaWYgKHByb3ZpZGVJU3RvcmFnZUZ1bGxQYXRoKSB7Ci0JCQkJcmV0dXJuIG5ldyBQYXRoKGZGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCX0KLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXROYW1lKCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCXJldHVybiBmRmlsZS5nZXROYW1lKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2lzUmVhZE9ubHkoKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JY2xhc3MgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0IGltcGxlbWVudHMgSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0IHsKLQkJTGlzdCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzID0gbmV3IFZlY3RvcigwKTsKLQkJYm9vbGVhbiBmSXNEaXJ0eSA9IGZhbHNlOwotCQlGaWxlQmFja2VkU3RvcmFnZSBmU3RvcmFnZSA9IG51bGw7Ci0KLQkJRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KEZpbGUgZmlsZSkgewotCQkJZlN0b3JhZ2UgPSBuZXcgRmlsZUJhY2tlZFN0b3JhZ2UoZmlsZSk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCNhZGRFbGVtZW50U3RhdGVMaXN0ZW5lcihvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklFbGVtZW50U3RhdGVMaXN0ZW5lcikKLQkJICovCi0JCXB1YmxpYyB2b2lkIGFkZEVsZW1lbnRTdGF0ZUxpc3RlbmVyKElFbGVtZW50U3RhdGVMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCQl9Ci0KLQkJdm9pZCBlbGVtZW50Q29udGVudEFib3V0VG9CZVJlcGxhY2VkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50Q29udGVudEFib3V0VG9CZVJlcGxhY2VkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZWxlbWVudENvbnRlbnRSZXBsYWNlZCgpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudENvbnRlbnRSZXBsYWNlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnREZWxldGVkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50RGVsZXRlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnREaXJ0eVN0YXRlQ2hhbmdlZChib29sZWFuIGRpcnR5KSB7Ci0JCQlzZXREaXJ0eShkaXJ0eSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnREaXJ0eVN0YXRlQ2hhbmdlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcywgZGlydHkpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50TW92ZWQoT2JqZWN0IG9sZEVsZW1lbnQsIE9iamVjdCBuZXdFbGVtZW50KSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnRNb3ZlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcywgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZXhpc3RzKCkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGV4aXN0cygpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5leGlzdHMoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCi0JCSAqLwotCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlGaWxlIGdldEZpbGUoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZkZpbGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQotCQkgKi8KLQkJcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmdldE5hbWUoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldFBlcnNpc3RhYmxlKCkKLQkJICovCi0JCXB1YmxpYyBJUGVyc2lzdGFibGVFbGVtZW50IGdldFBlcnNpc3RhYmxlKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpCi0JCSAqLwotCQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCXJldHVybiBmU3RvcmFnZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldFRvb2xUaXBUZXh0KCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZ2V0RnVsbFBhdGgoKSAhPSBudWxsID8gZlN0b3JhZ2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpIDogZlN0b3JhZ2UuZ2V0TmFtZSgpOwotCQl9Ci0KLQkJYm9vbGVhbiBpc0RpcnR5KCkgewotCQkJcmV0dXJuIGZJc0RpcnR5OwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQjcmVtb3ZlRWxlbWVudFN0YXRlTGlzdGVuZXIob3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXIpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50U3RhdGVMaXN0ZW5lcihJRWxlbWVudFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCWZFbGVtZW50U3RhdGVMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQkJfQotCi0JCXZvaWQgc2V0RGlydHkoYm9vbGVhbiBkaXJ0eSkgewotCQkJZklzRGlydHkgPSBkaXJ0eTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0Q2hhbmdlRGlydHlTdGF0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkgewotCQkJc3VwZXIoIlRvZ2dsZSBkaXJ0eSBmbGFnIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChpbnB1dHNbaV0gaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudERpcnR5U3RhdGVDaGFuZ2VkKCEoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5pc0RpcnR5KCkpOwotCQkJCX0KLQkJCX0KLQkJCWZJbnB1dExpc3QucmVmcmVzaCh0cnVlKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXREZWxldGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0RGVsZXRlQWN0aW9uKCkgewotCQkJc3VwZXIoIkRlbGV0ZSBJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnREZWxldGVkKCk7Ci0JCQkJfQotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlmSW5wdXRzLnJlbW92ZShpbnB1dHNbaV0pOwotCQkJfQotCQkJZklucHV0TGlzdC5yZWZyZXNoKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0TW92ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRNb3ZlQWN0aW9uKCkgewotCQkJc3VwZXIoIk1vdmUgSW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGlucHV0c1tpXSBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50TW92ZWQoaW5wdXRzW2ldLCBpbnB1dHNbaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRPcGVuQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIElucHV0T3BlbkFjdGlvbigpIHsKLQkJCXN1cGVyKCJPcGVuIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkub3BlbkVkaXRvcihpbnB1dHNbaV0sIGdldEVkaXRvcklkKGlucHV0c1tpXSkpOwotCQkJCX0KLQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQlvcGVuRXJyb3IoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAiT3BlblN5c3RlbUVkaXRvckFjdGlvbi5kaWFsb2dUaXRsZSIsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dFJlcGxhY2VDb250ZW50c0FjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmVwbGFjZSBJbnB1dCdzIENvbnRlbnRzIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnRDb250ZW50QWJvdXRUb0JlUmVwbGFjZWQoKTsKLQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50Q29udGVudFJlcGxhY2VkKCk7Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIFJlbW92ZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIFJlbW92ZUlucHV0QWN0aW9uKCkgewotCQkJc3VwZXIoIlJlbW92ZSIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlmSW5wdXRzLnJlbW92ZShpbnB1dHNbaV0pOwotCQkJfQotCQkJZklucHV0TGlzdC5yZWZyZXNoKCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBSZXVzZUVkaXRvckFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgUmV1c2VFZGl0b3JBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmV1c2UgRWRpdG9yIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIElSZXVzYWJsZUVkaXRvcikgewotCQkJCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLnJldXNlRWRpdG9yKCgoSVJldXNhYmxlRWRpdG9yKSBlZGl0b3IpLCBpbnB1dHNbaV0pOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5iZWVwKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJYm9vbGVhbiBlbmFibGUgPSB0cnVlOwotCQkJdHJ5IHsKLQkJCQllbmFibGUgPSBmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSBpbnN0YW5jZW9mIElSZXVzYWJsZUVkaXRvcjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWVuYWJsZSA9IHRydWU7Ci0JCQl9Ci0JCQlzZXRFbmFibGVkKGVuYWJsZSk7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwcm92aWRlSVN0b3JhZ2VGdWxsUGF0aCA9IHRydWU7Ci0KLQkvKioKLQkgKiBPcGVuIGFuIGVycm9yIHN0eWxlIGRpYWxvZyBmb3IgUGFydEluaXRFeGNlcHRpb24gYnkgaW5jbHVkaW5nIGFueSBleHRyYQotCSAqIGluZm9ybWF0aW9uIGZyb20gdGhlIG5lc3RlZCBDb3JlRXhjZXB0aW9uIGlmIHByZXNlbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG9wZW5FcnJvcihTaGVsbCBwYXJlbnQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UsIFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkvLyBDaGVjayBmb3IgYSBuZXN0ZWQgQ29yZUV4Y2VwdGlvbgotCQlDb3JlRXhjZXB0aW9uIG5lc3RlZEV4Y2VwdGlvbiA9IG51bGw7Ci0JCUlTdGF0dXMgc3RhdHVzID0gZXhjZXB0aW9uLmdldFN0YXR1cygpOwotCQlpZiAoc3RhdHVzICE9IG51bGwgJiYgc3RhdHVzLmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgQ29yZUV4Y2VwdGlvbikKLQkJCW5lc3RlZEV4Y2VwdGlvbiA9IChDb3JlRXhjZXB0aW9uKSBzdGF0dXMuZ2V0RXhjZXB0aW9uKCk7Ci0KLQkJaWYgKG5lc3RlZEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQkvLyBPcGVuIGFuIGVycm9yIGRpYWxvZyBhbmQgaW5jbHVkZSB0aGUgZXh0cmEKLQkJCS8vIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBuZXN0ZWQgQ29yZUV4Y2VwdGlvbgotCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHBhcmVudCwgdGl0bGUsIG1lc3NhZ2UsIG5lc3RlZEV4Y2VwdGlvbi5nZXRTdGF0dXMoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBPcGVuIGEgcmVndWxhciBlcnJvciBkaWFsb2cgc2luY2UgdGhlcmUgaXMgbm8KLQkJCS8vIGV4dHJhIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkKLQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHBhcmVudCwgdGl0bGUsIG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGFjdGlvbnMgPSBudWxsOwotCi0JVGFibGVWaWV3ZXIgZklucHV0TGlzdCA9IG51bGw7Ci0KLQlMaXN0IGZJbnB1dHMgPSBuZXcgQXJyYXlMaXN0KDApOwotCi0JT2JqZWN0IGZTZWxlY3RlZEVsZW1lbnQgPSBudWxsOwotCi0KLQlwdWJsaWMgRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3KCkgewotCQlzdXBlcigpOwotCQlhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJZklucHV0TGlzdCA9IG5ldyBUYWJsZVZpZXdlcihwYXJlbnQsIFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5NVUxUSSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0JCWZJbnB1dExpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJZklucHV0TGlzdC5zZXRMYWJlbFByb3ZpZGVyKG5ldyBFZGl0b3JJbnB1dExhYmVsUHJvdmlkZXIoKSk7Ci0JCWZJbnB1dExpc3QuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgRG91YmxlQ2xpY2tMaXN0ZW5lcigpKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCWZJbnB1dExpc3QuZ2V0VGFibGUoKS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0JCVN0cmluZ1tdIGNvbHVtbnMgPSBuZXcgU3RyaW5nW117IlBhdGgiLCAiVHlwZSJ9OwotCQlmSW5wdXRMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEVkaXRvcklucHV0TGFiZWxQcm92aWRlcigpKTsKLQotCi0JCVRhYmxlTGF5b3V0IHRsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLQkJQ2VsbEVkaXRvcltdIGNlbGxFZGl0b3JzID0gbmV3IENlbGxFZGl0b3JbNV07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykgewotCQkJdGxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDEpKTsKLQkJCVRhYmxlQ29sdW1uIHRjID0gbmV3IFRhYmxlQ29sdW1uKGZJbnB1dExpc3QuZ2V0VGFibGUoKSwgU1dULk5PTkUpOwotCQkJdGMuc2V0VGV4dChjb2x1bW5zW2ldKTsKLQkJCXRjLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCXRjLnNldFdpZHRoKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gMTQpOwotCQl9Ci0JCWZJbnB1dExpc3Quc2V0Q2VsbEVkaXRvcnMoY2VsbEVkaXRvcnMpOwotCQlmSW5wdXRMaXN0LnNldENvbHVtblByb3BlcnRpZXMoY29sdW1ucyk7Ci0KLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldExheW91dERhdGEoZ2QpOwotCi0JCU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsgLy8kTk9OLU5MUy0xJAotCQltZW51TWFuYWdlci5zZXRSZW1vdmVBbGxXaGVuU2hvd24oZmFsc2UpOwotCi0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRPcGVuQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dE1vdmVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0RGVsZXRlQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBSZW1vdmVJbnB1dEFjdGlvbigpKTsKLQkJTWVudSBtZW51ID0gbWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZklucHV0TGlzdC5nZXRDb250cm9sKCkpOwotCQlmSW5wdXRMaXN0LmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotCi0KLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0RGVmYXVsdChnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpLCAiIik7Ci0JCVN0cmluZyBwYXRoc1tdID0gU3RyaW5nVXRpbHMudW5wYWNrKFNTRVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpKSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChwYXRoc1tpXS5zdGFydHNXaXRoKCJTISIpKSB7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShwYXRoc1tpXS5zdWJzdHJpbmcoMikpKSk7Ci0JCQkJbWVudU1hbmFnZXIuYWRkKG5ldyBPcGVuV2l0aE1lbnUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgbnVsbCkpOwotCQkJfQotCQkJZWxzZSBpZiAocGF0aHNbaV0uc3RhcnRzV2l0aCgiRiEiKSkgewotCQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocGF0aHNbaV0uc3Vic3RyaW5nKDIpKSk7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7Ci0JCQkJbWVudU1hbmFnZXIuYWRkKG5ldyBPcGVuV2l0aE1lbnUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgZmlsZSkpOwotCQkJfQotCQl9Ci0KLQkJZklucHV0TGlzdC5zZXRJbnB1dChmSW5wdXRzKTsKLQkJZklucHV0TGlzdC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkJCQlmU2VsZWN0ZWRFbGVtZW50ID0gc2VsLmdldEZpcnN0RWxlbWVudCgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJTGlzdCBwYXRocyA9IG5ldyBBcnJheUxpc3QoMCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZklucHV0cy5zaXplKCk7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlPYmplY3QgaW5wdXQgPSBmSW5wdXRzLmdldChpKTsKLQkJCQlTdHJpbmcgcGF0aCA9IG51bGw7Ci0JCQkJaWYgKGlucHV0IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCXBhdGggPSAiUyEiICsgKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0Q2Fub25pY2FsUGF0aCgpOwotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJGISIgKyAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQkJCXBhdGhzLmFkZChwYXRoKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoZ2V0SW5wdXRzUHJlZmVyZW5jZU5hbWUoKSwgU3RyaW5nVXRpbHMucGFjaygoU3RyaW5nW10pIHBhdGhzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpKTsKLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCVN0cmluZyBnZXRFZGl0b3JJZChJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlJRWRpdG9yUmVnaXN0cnkgZWRpdG9yUmVnaXN0cnkgPSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBudWxsOwotCQlTdHJpbmcgZWRpdG9ySUQgPSBudWxsOwotCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtID0gKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpLmdldENvbnRlbnRzKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJdHlwZXMgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVzRm9yKGlucHV0U3RyZWFtLCBpbnB1dC5nZXROYW1lKCkpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCi0JCUlFZGl0b3JEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBlZGl0b3JSZWdpc3RyeS5nZXREZWZhdWx0RWRpdG9yKGlucHV0LmdldE5hbWUoKSwgdHlwZXNbMF0pOwotCQlpZiAoZGVzY3JpcHRvciAhPSBudWxsKSB7Ci0JCQllZGl0b3JJRCA9IGRlc2NyaXB0b3IuZ2V0SWQoKTsKLQkJfQotCQlpZiAoZWRpdG9ySUQgPT0gbnVsbCkgewotCQkJZWRpdG9ySUQgPSBFZGl0b3JzVUkuREVGQVVMVF9URVhUX0VESVRPUl9JRDsKLQkJfQotCQlyZXR1cm4gZWRpdG9ySUQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCVN0cmluZyBnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpIHsKLQkJcmV0dXJuICJFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXc6aW5wdXRzIjsKLQl9Ci0KLQlJRWRpdG9ySW5wdXRbXSBnZXRTZWxlY3RlZElucHV0cygpIHsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmSW5wdXRMaXN0LmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJaWYgKHNlbC5pc0VtcHR5KCkpIHsKLQkJCQlyZXR1cm4gbmV3IElFZGl0b3JJbnB1dFswXTsKLQkJCX0KLQkJCU9iamVjdFtdIGFyciA9IHNlbC50b0FycmF5KCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBuZXcgSUVkaXRvcklucHV0W2Fyci5sZW5ndGhdOwotCQkJU3lzdGVtLmFycmF5Y29weShhcnIsIDAsIGlucHV0cywgMCwgaW5wdXRzLmxlbmd0aCk7Ci0JCQlyZXR1cm4gaW5wdXRzOwotCQl9Ci0JCXJldHVybiBuZXcgSUVkaXRvcklucHV0WzBdOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgQWRkU3RvcmFnZUlucHV0QWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IEFkZEZpbGVJbnB1dEFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZW1vdmVJbnB1dEFjdGlvbigpKSk7Ci0KLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0T3BlbkFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBJbnB1dE1vdmVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0RGVsZXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkpKTsKLQl9Ci0KLQlJQWN0aW9uIHJlbWVtYmVyQWN0aW9uKElBY3Rpb24gYWN0aW9uKSB7Ci0JCWFjdGlvbnMuYWRkKGFjdGlvbik7Ci0JCXJldHVybiBhY3Rpb247Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFbmFibGVtZW50KCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCU9iamVjdCBhY3Rpb24gPSBhY3Rpb25zLmdldChpKTsKLQkJCWlmIChhY3Rpb24gaW5zdGFuY2VvZiBJVXBkYXRlKSB7Ci0JCQkJKChJVXBkYXRlKSBhY3Rpb24pLnVwZGF0ZSgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzY2MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmCi0gKiBkZXNpcmVkLCB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcwotICogcGx1Z2luLiBPdGhlciBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiAKLQkgKiBAcGFyYW0gbGV2ZWwKLQkgKiAgICAgICAgICAgIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsCi0JICogICAgICAgICAgICBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uCi0JICogICAgICAgICAgICBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiAgICAgICAgICAgIGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoCi0JICogICAgICAgICAgICAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogCi0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9SZWFkT25seVRvZ2dsZURlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzk0ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9SZWFkT25seVRvZ2dsZURlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFZGl0b3JBY3Rpb25EZWxlZ2F0ZSB7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb24gPSBudWxsOwotCUlFZGl0b3JQYXJ0IGZFZGl0b3IgPSBudWxsOwotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoKSB7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQpIHsKLQkJc3VwZXIodGV4dCk7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlzdXBlcih0ZXh0LCBzdHlsZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJZkVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudCkgewotCQkJSVRleHRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElUZXh0U2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJKChJU3RydWN0dXJlZERvY3VtZW50KSBkb2N1bWVudCkubWFrZVJlYWRPbmx5KHNlbGVjdGlvbi5nZXRPZmZzZXQoKSwgc2VsZWN0aW9uLmdldExlbmd0aCgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCXNldEVuYWJsZWQoIXNlbGVjdGlvbi5pc0VtcHR5KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzRkOTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFNTRVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzY5NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5KRmFjZVRleHRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5FY2xpcHNlVGV4dFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNTRVVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgU1NFVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpKTsKLQkJYWRkVGVzdChKRmFjZVRleHRUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoRWNsaXBzZVRleHRUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWUzNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQlJRWRpdG9yUGFydCBlZGl0b3IgPSBudWxsOwotCUlBY3Rpb24gZmFjdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBpbWFnZQotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gc3R5bGUKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIodGV4dCwgc3R5bGUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlI3NldEFjdGl2ZUVkaXRvcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIHRhcmdldEFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKSB7Ci0JCWVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQkJZmFjdGlvbiA9IHRhcmdldEFjdGlvbjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gcnVuQWN0aW9uKSB7Ci0JCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKGVkaXRvci5nZXRFZGl0b3JTaXRlKCkuZ2V0U2hlbGwoKSwgIlRlc3QiLCAiQ29tcGxldGVkIik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkvLyBkbyBub3RoaW5nCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YzNlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0RW1haWxOb3RpY2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIHNlbmROb3RpZmljYXRpb25zID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYWlsKCkgewotCQlhc3NlcnRGYWxzZSgiU2ltcGxlIHRlc3QgdG8gYmUgc3VyZSBlbWFpbCBnZXRzIHNlbnQgb24gZmFpbHVyZSIsIHNlbmROb3RpZmljYXRpb25zKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdExpbmVTdHlsZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODNmMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuSGlnaGxpZ2h0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnV0aWwuRWRpdG9yVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RMaW5lU3R5bGVQcm92aWRlciBpbXBsZW1lbnRzIExpbmVTdHlsZVByb3ZpZGVyIHsKLQotCUNvbG9yIGZvcmVncm91bmQgPSBudWxsOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RMaW5lU3R5bGVQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXIjaW5pdChvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZERvY3VtZW50LAotCSAqICAgICAgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5IaWdobGlnaHRlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKSB7Ci0JCS8vIG5vdGhpbmcgdG8gaW5pdAotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNwcmVwYXJlUmVnaW9ucyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbiwKLQkgKiAgICAgIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVwYXJlUmVnaW9ucyhJVHlwZWRSZWdpb24gY3VycmVudFJlZ2lvbiwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoLCBDb2xsZWN0aW9uIHN0eWxlUmFuZ2VzKSB7Ci0JCS8vIG1ha2UgZXZlcnl0aGluZyBib2xkIGdyZXkKLQkJaWYgKGZvcmVncm91bmQgPT0gbnVsbCkKLQkJCWZvcmVncm91bmQgPSBFZGl0b3JVdGlsaXR5LmdldENvbG9yKG5ldyBSR0IoMTI3LCAxMjcsIDEyNykpOwotCQlzdHlsZVJhbmdlcy5hZGQobmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGxlbmd0aCwgZm9yZWdyb3VuZCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyI3JlbGVhc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIG5vdGhpbmcgdG8gcmVsZWFzZQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YjQ3MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkxvY2F0aW9uS2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNob3dJblRhcmdldExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5BYnN0cmFjdFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUuRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfV0FJVCA9IDEwMDAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX0RFTFRBID0gNTA7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJSUVkaXRvcklucHV0IGlucHV0ID0gbmV3IEZpbGVFZGl0b3JJbnB1dChmRmlsZSk7Ci0JCQkvKgotCQkJICogVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRlc3RpbmcgaW5pdCwgY3JlYXRlUGFydENvbnRyb2wsCi0JCQkgKiBiZWdpbkJhY2tncm91bmRPcGVyYXRpb24sIGVuZEJhY2tncm91bmRPcGVyYXRpb24gbWV0aG9kcwotCQkJICovCi0JCQlJRWRpdG9yUGFydCBwYXJ0ID0gcGFnZS5vcGVuRWRpdG9yKGlucHV0LCAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIsIHRydWUpOwotCQkJaWYgKHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQlmRWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0OwotCQkJZWxzZQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoZkVkaXRvciAhPSBudWxsKSB7Ci0JCQkvKgotCQkJICogVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRlc3RpbmcgY2xvc2UgYW5kIGRpc3Bvc2UgbWV0aG9kcwotCQkJICovCi0JCQlmRWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCAmJiAhYmxhbmtKc3BGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtKc3BGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb1NhdmluZygpIHsKLQkJZkVkaXRvci5kb1JldmVydFRvU2F2ZWQoKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJldmVydCB0byBzYXZlZCIsIHRydWUpOwotCQlmRWRpdG9yLmRvU2F2ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNhdmUiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RWRpdG9yQ29udGV4dE1lbnVBYm91dFRvU2hvdygpIHsKLQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoKTsKLQkJZkVkaXRvci5lZGl0b3JDb250ZXh0TWVudUFib3V0VG9TaG93KG1lbnUpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcHJlcGFyZSBmb3IgY29udGV4dCBtZW51IGFib3V0IHRvIHNob3ciLCB0cnVlKTsKLQkJbWVudS5kaXNwb3NlKCk7Ci0JCW1lbnUgPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGFwdGVyKCkgewotCQlPYmplY3QgYWRhcHRlciA9IGZFZGl0b3IuZ2V0QWRhcHRlcihJU2hvd0luVGFyZ2V0TGlzdC5jbGFzcyk7Ci0JCWFzc2VydFRydWUoIkdldCBhZGFwdGVyIGZvciBzaG93IGluIHRhcmdldCBmYWlsZWQiLCBhZGFwdGVyIGluc3RhbmNlb2YgSVNob3dJblRhcmdldExpc3QpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTZXRFZGl0b3JQYXJ0KCkgewotCQlmRWRpdG9yLnNldEVkaXRvclBhcnQobnVsbCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzZXQgZWRpdG9yIHBhcnQiLCB0cnVlKTsKLQkJSUVkaXRvclBhcnQgcGFydCA9IGZFZGl0b3IuZ2V0RWRpdG9yUGFydCgpOwotCQlhc3NlcnRUcnVlKCJEaWQgbm90IGdldCBleHBlY3RlZCBlZGl0b3IgcGFydCIsIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVEb2N1bWVudFByb3ZpZGVyKCkgewotCQlmRWRpdG9yLmluaXRpYWxpemVEb2N1bWVudFByb3ZpZGVyKG51bGwpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkb2N1bWVudCBwcm92aWRlciIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPcmllbnRhdGlvbigpIHsKLQkJaW50IG9yID0gZkVkaXRvci5nZXRPcmllbnRhdGlvbigpOwotCQlhc3NlcnRFcXVhbHMoU1dULkxFRlRfVE9fUklHSFQsIG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VsZWN0aW9uUHJvdmlkZXIoKSB7Ci0JCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IGZFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRWRpdG9yJ3Mgc2VsZWN0aW9uIHByb3ZpZGVyIHdhcyBudWxsIiwgcHJvdmlkZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0Vmlld2VyKCkgewotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBmRWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRWRpdG9yJ3MgdGV4dCB2aWV3ZXIgd2FzIG51bGwiLCB2aWV3ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1lbWJlclJlc3RvcmVTZWxlY3Rpb24oKSB7Ci0JCWZFZGl0b3IucmVtZW1iZXJTZWxlY3Rpb24oKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJlbWVtYmVyIGVkaXRvciBzZWxlY3Rpb24iLCB0cnVlKTsKLQkJZkVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byByZXN0b3JlIGVkaXRvciBzZWxlY3Rpb24iLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2FmZWx5U2FuaXR5Q2hlY2soKSB7Ci0JCWZFZGl0b3Iuc2FmZWx5U2FuaXR5Q2hlY2tTdGF0ZShmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2FmZWx5IHNhbml0eSBjaGVjayBlZGl0b3Igc3RhdGUiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2hvd0J1c3koKSB7Ci0JCWZFZGl0b3Iuc2hvd0J1c3koZmFsc2UpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2hvdyBlZGl0b3IgaXMgYnVzeSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVcGRhdGUoKSB7Ci0JCWZFZGl0b3IudXBkYXRlKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byB1cGRhdGUgZWRpdG9yIiwgdHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTaW5nbGVOb25VSVRocmVhZFVwZGF0ZXNUb0VkaXRvckRvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgInRlc3RCYWNrZ3JvdW5kQ2hhbmdlcy54bWwiKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciB0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciB0ZXh0RmlsZUJ1ZmZlciA9IHRleHRGaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudCA9IHRleHRGaWxlQnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIjw/eG1sIGVuY29kaW5nPVwiVVRGLThcIiB2ZXJzaW9uPVwiMS4wXCI/PlxuIik7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQotCQlTdHJpbmcgdGVzdFRleHQgPSBkb2N1bWVudC5nZXQoKSArICI8Yy8+PGIvPjxhLz4iOwotCQlmaW5hbCBpbnQgZW5kID0gZG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJSUVkaXRvclBhcnQgb3BlbmVkRWRpdG9yID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSk7Ci0KLQkJZmluYWwgYm9vbGVhbiBzdGF0ZVtdID0gbmV3IGJvb2xlYW5bXXtmYWxzZX07Ci0JCUpvYiBjaGFuZ2VyID0gbmV3IEpvYigidGV4dCBjaGFuZ2VyIikgewotCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCXRyeSB7Ci0JCQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kLCAwLCAiPGEvPiIpOwotCQkJCQlkb2N1bWVudC5yZXBsYWNlKGVuZCwgMCwgIjxiLz4iKTsKLQkJCQkJZG9jdW1lbnQucmVwbGFjZShlbmQsIDAsICI8Yy8+Iik7Ci0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBTU0VVSVBsdWdpbi5JRCwgZS5nZXRNZXNzYWdlKCkpOwotCQkJCX0KLQkJCQlmaW5hbGx5IHsKLQkJCQkJc3RhdGVbMF0gPSB0cnVlOwotCQkJCX0KLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJfTsKLQkJY2hhbmdlci5zZXRVc2VyKHRydWUpOwotCQljaGFuZ2VyLnNldFN5c3RlbShmYWxzZSk7Ci0JCWNoYW5nZXIuc2NoZWR1bGUoKTsKLQotCQl3aGlsZSAoIXN0YXRlWzBdKSB7Ci0JCQlvcGVuZWRFZGl0b3IuZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLnJlYWRBbmREaXNwYXRjaCgpOwotCQl9Ci0KLQkJU3RyaW5nIGZpbmFsVGV4dCA9IGRvY3VtZW50LmdldCgpOwotCQl0ZXh0RmlsZUJ1ZmZlci5jb21taXQobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgdHJ1ZSk7Ci0JCXRleHRGaWxlQnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJYWN0aXZlUGFnZS5jbG9zZUVkaXRvcihvcGVuZWRFZGl0b3IsIGZhbHNlKTsKLQkJYXNzZXJ0RXF1YWxzKCJOb24tVUkgY2hhbmdlcyBkaWQgbm90IGFwcGx5IiwgdGVzdFRleHQsIGZpbmFsVGV4dCk7Ci0JfQotCi0JCi0JLyoqCi0JICogTm90ZTogVGhpcyB0ZXN0IHRha2VzIGEgd2hpbGUgdG8gcnVuLCBidXQgaXQncyB0ZXN0aW5nIHNjYWxhYmlsaXR5IGFmdGVyIGFsbC4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNYW55Tm9uVUlUaHJlYWRzVXBkYXRpbmdFZGl0b3JEb2N1bWVudCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBpbnQgbnVtYmVyT2ZKb2JzID0gNTA7Ci0JCS8qKgotCQkgKiAxNSBtaW51dGUgdGltZW91dCBiZWZvcmUgd2Ugc3RvcCB3YWl0aW5nIGZvciB0aGUgY2hhbmdlIGpvYnMgdG8KLQkJICogY29tcGxldGUKLQkJICovCi0JCWxvbmcgdGltZW91dCA9IDE1KjYwKjEwMDA7Ci0KLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAidGVzdE1hbnlCYWNrZ3JvdW5kQ2hhbmdlcy54bWwiKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciB0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciB0ZXh0RmlsZUJ1ZmZlciA9IHRleHRGaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudCA9IHRleHRGaWxlQnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIjw/eG1sIGVuY29kaW5nPVwiVVRGLThcIiB2ZXJzaW9uPVwiMS4wXCI/PlxuIik7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQotCQlmaW5hbCBpbnQgaW5zZXJ0aW9uUG9pbnQgPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJLy8gbnVtYmVyT2ZKb2JzIEpvYnMsIGluc2VydGluZyAyNiB0YWdzLCBlYWNoIDQgY2hhcmFjdGVycyBsb25nCi0JCWludCB0ZXN0TGVuZ3RoID0gaW5zZXJ0aW9uUG9pbnQgKyBudW1iZXJPZkpvYnMgKiA0ICogMjY7Ci0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJYWN0aXZlUGFnZS5zaG93VmlldyhJUGFnZUxheW91dC5JRF9QUk9HUkVTU19WSUVXKTsKLQkJSUVkaXRvclBhcnQgb3BlbmVkRWRpdG9yID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSk7Ci0KLQkJZmluYWwgaW50IGZpbmlzaGVkW10gPSBuZXcgaW50W117bnVtYmVyT2ZKb2JzfTsKLQkJSm9iIGNoYW5nZXJzW10gPSBuZXcgSm9iW251bWJlck9mSm9ic107Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhbmdlcnMubGVuZ3RoOyBpKyspIHsKLQkJCWNoYW5nZXJzW2ldID0gbmV3IEpvYigiVGV4dCBDaGFuZ2VyICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGkpKSB7Ci0JCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQl0cnkgewotCQkJCQkJY2hhciBuYW1lc1tdID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIi50b0NoYXJBcnJheSgpOwotCQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7IGorKykgewotCQkJCQkJCWRvY3VtZW50LnJlcGxhY2UoaW5zZXJ0aW9uUG9pbnQgKyA0ICogaiwgMCwgIjwiICsgbmFtZXNbal0gKyAiLz4iKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFNTRVVJUGx1Z2luLklELCBlLmdldE1lc3NhZ2UoKSk7Ci0JCQkJCX0KLQkJCQkJZmluYWxseSB7Ci0JCQkJCQlmaW5pc2hlZFswXS0tOwotCQkJCQl9Ci0JCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJCX0KLQkJCX07Ci0JCQljaGFuZ2Vyc1tpXS5zZXRVc2VyKHRydWUpOwotCQkJY2hhbmdlcnNbaV0uc2V0U3lzdGVtKGZhbHNlKTsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQljaGFuZ2Vyc1tpXS5zY2hlZHVsZSgpOwotCQl9Ci0KLQkJbG9uZyBydW50aW1lID0gMDsKLQkJd2hpbGUgKGZpbmlzaGVkWzBdID4gMCAmJiAocnVudGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXQpIHsKLQkJCW9wZW5lZEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkucmVhZEFuZERpc3BhdGNoKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiVGVzdCB0aW1lZCBvdXQiLCBydW50aW1lIC0gc3RhcnRUaW1lIDwgdGltZW91dCk7Ci0KLQkJaW50IGZpbmFsTGVuZ3RoID0gZG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKG9wZW5lZEVkaXRvciwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoIlNvbWUgbm9uLVVJIGNoYW5nZXMgZGlkIG5vdCBhcHBseSIsIHRlc3RMZW5ndGgsIGZpbmFsTGVuZ3RoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHJlY2VpdmluZyB0aGUgaW5pdGlhbCByZWNvbmNpbGUgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGVkaXRvciBvcGVucwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsUmVjb25jaWxpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAicmVjb25jaWxpbmd0ZXN0LnhtbCIpOwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCWZpbmFsIGludFtdIHN0YXRlID0gbmV3IGludFsyXTsKLQkJQXJyYXlzLmZpbGwoc3RhdGUsIC0xKTsKLQkJSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIoKSB7Ci0JCQlpbnQgbW9kID0gMDsKLQkJCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLCBib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJCQlzdGF0ZVsxXSA9IG1vZCsrOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCXN0YXRlWzBdID0gbW9kKys7Ci0JCQl9Ci0JCX07Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIik7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRUcnVlKCJOb3QgYSBTdHJ1Y3R1cmVkVGV4dEVkaXRvciIsIGVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKTsKLQkJCWFkZFJlY29uY2lsaW5nTGlzdGVuZXIoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBlZGl0b3IsIGxpc3RlbmVyKTsKLQkJCXdhaXRGb3JSZWNvbmNpbGUoc3RhdGUpOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogUmVjb25jaWxpbmcgZGlkIG5vdCBjb21wbGV0ZSBpbiBhIHRpbWVseSBmYXNoaW9uIiwgc3RhdGVbMF0gIT0gLTEgJiYgc3RhdGVbMV0gIT0gLTEpOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogYWJvdXRUb0JlUmVjb25jaWxlZCBub3QgaW52b2tlZCBmaXJzdCAoIiArIHN0YXRlWzBdICsiKSIsIHN0YXRlWzBdID09IDApOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogcmVjb25jaWxlZCBub3QgaW52b2tlZCBhZnRlciBhYm91dFRvQmVSZWNvbmNpbGVkICgiICsgc3RhdGVbMV0gKyIpIiwgc3RhdGVbMV0gPT0gMSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAoZWRpdG9yICE9IG51bGwgJiYgYWN0aXZlUGFnZSAhPSBudWxsKSB7Ci0JCQkJYWN0aXZlUGFnZS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhhdCBtb2RpZmljYXRpb25zIHRvIHRoZSBlZGl0b3IncyBjb250ZW50IHdpbGwgbm90aWZ5IHJlY29uY2lsaW5nIGxpc3RlbmVycwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNb2RpZmljYXRpb25SZWNvbmNpbGluZygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArICJyZWNvbmNpbGluZ21vZGlmaWNhdGlvbnRlc3QueG1sIik7Ci0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJZmluYWwgaW50W10gc3RhdGUgPSBuZXcgaW50WzJdOwotCQlBcnJheXMuZmlsbChzdGF0ZSwgLTEpOwotCQlJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcigpIHsKLQkJCWludCBtb2QgPSAwOwotCQkJcHVibGljIHZvaWQgcmVjb25jaWxlZChJRG9jdW1lbnQgZG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwgbW9kZWwsIGJvb2xlYW4gZm9yY2VkLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQkJCXN0YXRlWzFdID0gbW9kKys7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCQkJc3RhdGVbMF0gPSBtb2QrKzsKLQkJCX0KLQkJfTsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSwgIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiKTsKLQkJdHJ5IHsKLQkJCWFzc2VydFRydWUoIk5vdCBhIFN0cnVjdHVyZWRUZXh0RWRpdG9yIiwgZWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpOwotCQkJYWRkUmVjb25jaWxpbmdMaXN0ZW5lcigoU3RydWN0dXJlZFRleHRFZGl0b3IpIGVkaXRvciwgbGlzdGVuZXIpOwotCQkJd2FpdEZvclJlY29uY2lsZShzdGF0ZSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBSZWNvbmNpbGluZyBkaWQgbm90IGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24iLCBzdGF0ZVswXSAhPSAtMSAmJiBzdGF0ZVsxXSAhPSAtMSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBhYm91dFRvQmVSZWNvbmNpbGVkIG5vdCBpbnZva2VkIGZpcnN0ICgiICsgc3RhdGVbMF0gKyIpIiwgc3RhdGVbMF0gPT0gMCk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiByZWNvbmNpbGVkIG5vdCBpbnZva2VkIGFmdGVyIGFib3V0VG9CZVJlY29uY2lsZWQgKCIgKyBzdGF0ZVsxXSArIikiLCBzdGF0ZVsxXSA9PSAxKTsKLQkJCUlEb2N1bWVudCBkb2N1bWVudCA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIGVkaXRvcikuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJCWFzc2VydFRydWUoIkVkaXRvciBkb2Vzbid0IGhhdmUgYSBkb2N1bWVudCIsIGRvY3VtZW50ICE9IG51bGwpOwotCQkJZG9jdW1lbnQuc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz4iKTsKLQkJCUFycmF5cy5maWxsKHN0YXRlLCAtMSk7Ci0JCQl3YWl0Rm9yUmVjb25jaWxlKHN0YXRlKTsKLQkJCWFzc2VydFRydWUoIk1vZGlmaWVkOiBSZWNvbmNpbGluZyBkaWQgbm90IGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24iLCBzdGF0ZVswXSAhPSAtMSAmJiBzdGF0ZVsxXSAhPSAtMSk7Ci0JCQlhc3NlcnRUcnVlKCJNb2RpZmllZDogYWJvdXRUb0JlUmVjb25jaWxlZCBub3QgaW52b2tlZCBmaXJzdCAoIiArIHN0YXRlWzBdICsiKSIsIHN0YXRlWzBdID09IDIpOwotCQkJYXNzZXJ0VHJ1ZSgiTW9kaWZpZWQ6IHJlY29uY2lsZWQgbm90IGludm9rZWQgYWZ0ZXIgYWJvdXRUb0JlUmVjb25jaWxlZCAoIiArIHN0YXRlWzFdICsiKSIsIHN0YXRlWzFdID09IDMpOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGVkaXRvciAhPSBudWxsICYmIGFjdGl2ZVBhZ2UgIT0gbnVsbCkgewotCQkJCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgYW4gZWRpdG9yIG5vdGlmaWVzIHJlY29uY2lsaW5nIGxpc3RlbmVycyB3aGVuIHRoZSBlZGl0b3IgZ2V0cyBmb2N1cy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9jdXNlZFJlY29uY2lsaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgImZvY3VzdGVzdC54bWwiKTsKLQkJSUZpbGUgZmlsZUFsdCA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAiZm9jdXN0ZXN0QWx0LnhtbCIpOwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCWZpbmFsIGludFtdIHN0YXRlID0gbmV3IGludFsyXTsKLQkJQXJyYXlzLmZpbGwoc3RhdGUsIC0xKTsKLQkJSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIoKSB7Ci0JCQlpbnQgbW9kID0gMDsKLQkJCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLCBib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJCQlzdGF0ZVsxXSA9IG1vZCsrOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCXN0YXRlWzBdID0gbW9kKys7Ci0JCQl9Ci0JCX07Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIik7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRUcnVlKCJOb3QgYSBTdHJ1Y3R1cmVkVGV4dEVkaXRvciIsIGVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKTsKLQkJCWFkZFJlY29uY2lsaW5nTGlzdGVuZXIoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBlZGl0b3IsIGxpc3RlbmVyKTsKLQkJCXdhaXRGb3JSZWNvbmNpbGUoc3RhdGUpOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogUmVjb25jaWxpbmcgZGlkIG5vdCBjb21wbGV0ZSBpbiBhIHRpbWVseSBmYXNoaW9uIiwgc3RhdGVbMF0gIT0gLTEgJiYgc3RhdGVbMV0gIT0gLTEpOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogYWJvdXRUb0JlUmVjb25jaWxlZCBub3QgaW52b2tlZCBmaXJzdCAoIiArIHN0YXRlWzBdICsiKSIsIHN0YXRlWzBdID09IDApOwotCQkJYXNzZXJ0VHJ1ZSgiSW5pdGlhbDogcmVjb25jaWxlZCBub3QgaW52b2tlZCBhZnRlciBhYm91dFRvQmVSZWNvbmNpbGVkICgiICsgc3RhdGVbMV0gKyIpIiwgc3RhdGVbMV0gPT0gMSk7Ci0JCQlJREUub3BlbkVkaXRvcihhY3RpdmVQYWdlLCBmaWxlQWx0LCAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIpOwotCQkJQXJyYXlzLmZpbGwoc3RhdGUsIC0xKTsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihhY3RpdmVQYWdlLCBmaWxlLCAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIpOwotCQkJYXNzZXJ0RXF1YWxzKCJEaWRuJ3QgZ2V0IHRoZSBvcmlnaW5hbCBlZGl0b3IgYmFjay4iLCBlZGl0b3IsIGVkaXRvclBhcnQpOwotCQkJd2FpdEZvclJlY29uY2lsZShzdGF0ZSk7Ci0JCQlhc3NlcnRUcnVlKCJNb2RpZmllZDogUmVjb25jaWxpbmcgZGlkIG5vdCBjb21wbGV0ZSBpbiBhIHRpbWVseSBmYXNoaW9uIiwgc3RhdGVbMF0gIT0gLTEgJiYgc3RhdGVbMV0gIT0gLTEpOwotCQkJYXNzZXJ0VHJ1ZSgiTW9kaWZpZWQ6IGFib3V0VG9CZVJlY29uY2lsZWQgbm90IGludm9rZWQgZmlyc3QgKCIgKyBzdGF0ZVswXSArIikiLCBzdGF0ZVswXSA9PSAyKTsKLQkJCWFzc2VydFRydWUoIk1vZGlmaWVkOiByZWNvbmNpbGVkIG5vdCBpbnZva2VkIGFmdGVyIGFib3V0VG9CZVJlY29uY2lsZWQgKCIgKyBzdGF0ZVsxXSArIikiLCBzdGF0ZVsxXSA9PSAzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChlZGl0b3IgIT0gbnVsbCAmJiBhY3RpdmVQYWdlICE9IG51bGwpIHsKLQkJCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFJlY29uY2lsaW5nTGlzdGVuZXIoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yLCBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciBsaXN0ZW5lcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU1ldGhvZCBtQ29uZmlnID0gQWJzdHJhY3RUZXh0RWRpdG9yLmNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJnZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIiwgbnVsbCk7Ci0JCW1Db25maWcuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJT2JqZWN0IGNvbmZpZyA9IG1Db25maWcuaW52b2tlKGVkaXRvciwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IGEgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIiwgY29uZmlnIGluc3RhbmNlb2YgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbik7Ci0JCUlSZWNvbmNpbGVyIHJlY29uY2lsZXIgPSAoKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24pIGNvbmZpZykuZ2V0UmVjb25jaWxlcihmRWRpdG9yLmdldFRleHRWaWV3ZXIoKSk7Ci0JCWFzc2VydFRydWUoIlJlY29uY2lsZXIgaXMgbm90IGEgRGlydHlSZWdpb25Qcm9jZXNzb3IiLCByZWNvbmNpbGVyIGluc3RhbmNlb2YgRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3IpOwotCQkoKERvY3VtZW50UmVnaW9uUHJvY2Vzc29yKSByZWNvbmNpbGVyKS5hZGRSZWNvbmNpbGluZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3YWl0Rm9yUmVjb25jaWxlKGludFtdIHN0YXRlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZSAoKHN0YXRlWzBdID09IC0xIHx8IHN0YXRlWzFdID09IC0xKSAmJiB0aW1lIDwgTUFYX1dBSVQpIHsKLQkJCVRocmVhZC5zbGVlcChUSU1FX0RFTFRBKTsKLQkJCXRpbWUgKz0gVElNRV9ERUxUQTsKLQkJfQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk4MWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JTGlzdCBjb2xvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJzc2UgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLQotCS8qKgotCSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyBqdXN0IHRvIHRlc3QgaWYgd2UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBsb3RzCi0JICogb2YgUkJHIGNvbG9ycywgZXZlbiBpZiBkaXNwbGF5IHNldCB0byAiMjU2IiAob24gTGludXgpLiBBbmQsIEJUVywgaXQKLQkgKiBkb2VzIG5vdCBmYWlsIGV2ZW4gd2l0aCAyNTYgY29sb3JzIHNldCwgYXQgbGVhc3Qgb24gTGludXgsIGluIGRldi4gZW52LgotCSAqIFZhcnlpbmcgYWxsIHRocmVlIFJHQiBudW1iZXJzLCB0aG91Z2gsIGl0IGlzIGVhc3kgdG8gcnVuIG91dCBvZiBtZW1vcnkhCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbG9ySGFuZGxlcygpIHsKLQkJRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXRDdXJyZW50KCk7Ci0JCWlmIChkaXNwbGF5ID09IG51bGwpCi0JCQlkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImRpc3BsYXkgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIGRpc3BsYXkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IDI1NjsgaisrKSB7Ci0JCQkJLy8gMjU2IGN1YmVkIHJ1bnMgb3V0IG9mIG1lbW9yeQotCQkJCS8vIGZvciAoaW50IGsgPSAwOyBrIDwgMjU2OyBrKyspIHsKLQkJCQljb2xvckxpc3QuYWRkKG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKGksIGosIDUwKSkpOwotCQkJCS8vIH0KLQotCQkJfQotCi0JCX0KLQkJLy8gaWYgd2UgZ2V0IHRoaXMgZmFyIHdpdGhvdXQgZXJyb3IsIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzYzFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtQcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5wcmVzZW50YXRpb24uSVByZXNlbnRhdGlvblJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5Mb2dnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJU3RydWN0dXJlZFBhcnRpdGlvbnMuREVGQVVMVF9QQVJUSVRJT04pOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZShjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA9PSAxKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZERvY3VtZW50UGFydGl0aW9uaW5nKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmcgcGFydGl0aW9uaW5nID0gZkNvbmZpZy5nZXRDb25maWd1cmVkRG9jdW1lbnRQYXJ0aXRpb25pbmcoZlZpZXdlcik7Ci0JCWFzc2VydEVxdWFscyhJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HLCBwYXJ0aXRpb25pbmcpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkVGV4dEhvdmVyU3RhdGVNYXNrcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJaW50W10gbWFza3MgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRUZXh0SG92ZXJTdGF0ZU1hc2tzKGZWaWV3ZXIsIElTdHJ1Y3R1cmVkUGFydGl0aW9ucy5ERUZBVUxUX1BBUlRJVElPTik7Ci0JCWFzc2VydEVxdWFscygyLCBtYXNrcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROdWxsKCJ0aGVyZSBpcyBhIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua1ByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua1ByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEh5cGVybGlua1ByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaHlwZXJsaW5rIHByZXNlbnRlciBzaG91bGRuJ3QgYmUgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9Db250cm9sQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaW5mbyBjb250cm9sIGNyZWF0b3Igd2FzIG51bGwiLCBpbmZvQ29udHJvbENyZWF0b3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIHdhcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJLy8gdGhlcmUgc2hvdWxkIGJlIG5vIGxpbmVzdHlsZXByb3ZpZGVycyBmb3IgZGVmYXVsdAotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlhc3NlcnROdWxsKCJsaW5lIHN0eWxlIHByb3ZpZGVycyBpcyBub3QgbnVsbCIsIHByb3ZpZGVycyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldE92ZXJ2aWV3UnVsZXJBbm5vdGF0aW9uSG92ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBbm5vdGF0aW9uSG92ZXIgYW5ub3RhdGlvbkhvdmVyID0gZkNvbmZpZy5nZXRPdmVydmlld1J1bGVyQW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJhbm5vdGF0aW9uIGhvdmVyIHdhcyBudWxsIiwgYW5ub3RhdGlvbkhvdmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJlc2VudGF0aW9uUmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVByZXNlbnRhdGlvblJlY29uY2lsZXIgcHJlc2VudGF0aW9uUmVjb25jaWxlciA9IGZDb25maWcuZ2V0UHJlc2VudGF0aW9uUmVjb25jaWxlcihmVmlld2VyKTsKLQkJLy8gb3VyIGRlZmF1bHQgcHJlc2VudGF0aW9uIHJlY29uY2lsZXIgaXMgbm8gbG9uZ2VyIG51bGwKLQkJYXNzZXJ0Tm90TnVsbCgicHJlc2VudGF0aW9uIHJlY29uY2lsZXIgd2FzIG51bGwiLCBwcmVzZW50YXRpb25SZWNvbmNpbGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciB3YXMgbnVsbCIsIHIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRVbmRvTWFuYWdlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVVuZG9NYW5hZ2VyIHVuZG9NYW5hZ2VyID0gZkNvbmZpZy5nZXRVbmRvTWFuYWdlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidW5kbyBtYW5hZ2VyIHdhcyBudWxsIiwgdW5kb01hbmFnZXIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTY1ZWUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5TU0VVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlODY0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci0KLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIGFjY2Vzc2luZyBjbGFzc2VzIGFuZCBtZW1iZXJzIHdoaWNoIGNhbm5vdAotICogYmUgYWNjZXNzZWQgdXNpbmcgc3RhbmRhcmQgSmF2YSBhY2Nlc3MgY29udHJvbCBsaWtlIHByaXZhdGUKLSAqIG9yIHBhY2thZ2UgdmlzaWJsZSBlbGVtZW50cy4KLSAqCi0gKiBAc2luY2UgMy4xCi0gKi8KLXB1YmxpYyBjbGFzcyBBY2Nlc3NvciB7Ci0KLQkvKiogVGhlIGNsYXNzIHRvIGFjY2Vzcy4gKi8KLQlwcml2YXRlIENsYXNzIGZDbGFzczsKLQkvKiogVGhlIGluc3RhbmNlIHRvIGFjY2Vzcy4gKi8KLQlwcml2YXRlIE9iamVjdCBmSW5zdGFuY2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gPGNvZGU+aW5zdGFuY2U8L2NvZGU+IGFuZAotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPi4gT25seSBub24taW5oZXJpdGVkIG1lbWJlcnMgdGhhdCBwYXJ0aWN1bGFyCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+IGNhbiBiZSBhY2Nlc3NlZC4KLQkgKgotCSAqIEBwYXJhbSBpbnN0YW5jZSB0aGUgaW5zdGFuY2UKLQkgKiBAcGFyYW0gY2xhenogdGhlIGNsYXNzCi0JICovCi0JcHVibGljIEFjY2Vzc29yKE9iamVjdCBpbnN0YW5jZSwgQ2xhc3MgY2xhenopIHsKLQkJb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXp6KTsKLQkJZkluc3RhbmNlPSBpbnN0YW5jZTsKLQkJZkNsYXNzPSBjbGF6ejsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gPGNvZGU+aW5zdGFuY2U8L2NvZGU+IGFuZAotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPi4gT25seSBub24taW5oZXJpdGVkIG1lbWJlcnMgdGhhdCBwYXJ0aWN1bGFyCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+IGNhbiBiZSBhY2Nlc3NlZC4KLQkgKgotCSAqIEBwYXJhbSBpbnN0YW5jZSB0aGUgaW5zdGFuY2UKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQlBc3NlcnQuaXNOb3ROdWxsKGluc3RhbmNlKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGFzc05hbWUpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTG9hZGVyKTsKLQkJZkluc3RhbmNlPSBpbnN0YW5jZTsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gZ2V0IHRoZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuCi0JICogYXJndW1lbnRzIHRoZXkgbXVzdCBhbGwgYmUgaW5zdGFuY2VvZiBPYmplY3QuIFVzZQotCSAqIHtAbGluayAjQWNjZXNzb3IoU3RyaW5nLCBDbGFzc0xvYWRlciwgQ2xhc3NbXSwgT2JqZWN0W10pfSBpZiB0aGlzCi0JICogaXMgbm90IHRoZSBjYXNlLjwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyB3aGljaCBtdXN0IGFsbCBiZSBpbnN0YW5jZSBvZiBPYmplY3QKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIsIE9iamVjdFtdIGNvbnN0cnVjdG9yQXJncykgewotCQl0aGlzKGNsYXNzTmFtZSwgY2xhc3NMb2FkZXIsIGdldFR5cGVzKGNvbnN0cnVjdG9yQXJncyksIGNvbnN0cnVjdG9yQXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yVHlwZXMgdGhlIHR5cGVzIG9mIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKLQkgKiBAcGFyYW0gY29uc3RydWN0b3JBcmdzIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIsIENsYXNzW10gY29uc3RydWN0b3JUeXBlcywgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yPSBudWxsOwotCQl0cnkgewotCQkJY29uc3RydWN0b3I9IGZDbGFzcy5nZXREZWNsYXJlZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yVHlwZXMpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZTIpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKGNvbnN0cnVjdG9yKTsKLQkJY29uc3RydWN0b3Iuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJdHJ5IHsKLQkJCWZJbnN0YW5jZT0gY29uc3RydWN0b3IubmV3SW5zdGFuY2UoY29uc3RydWN0b3JBcmdzKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gYWNjZXNzIHN0YXRpYyBzdHVmZi4KLQkgKiA8L3A+Ci0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgYWxsIHRob3NlIGFyZ3VtZW50cyBtdXN0IGJlIGluc3RhbmNlIG9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNpbnZva2UoU3RyaW5nLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG1ldGhvZCBuYW1lCi0JICogQHBhcmFtIGFyZ3VtZW50cyB0aGUgbWV0aG9kIGFyZ3VtZW50cyB3aGljaCBtdXN0IGFsbCBiZSBpbnN0YW5jZSBvZiBPYmplY3QKLQkgKiBAcmV0dXJuIHRoZSBtZXRob2QgcmV0dXJuIHZhbHVlCi0JICovCi0JcHVibGljIE9iamVjdCBpbnZva2UoU3RyaW5nIG1ldGhvZE5hbWUsIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQlyZXR1cm4gaW52b2tlKG1ldGhvZE5hbWUsIGdldFR5cGVzKGFyZ3VtZW50cyksIGFyZ3VtZW50cyk7Ci0JfQotCi0JLyoqCi0JICogSW52b2tlcyB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG1ldGhvZCBuYW1lIGFuZCBhcmd1bWVudHMuCi0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gdHlwZXMgdGhlIGFyZ3VtZW50IHR5cGVzCi0JICogQHBhcmFtIGFyZ3VtZW50cyB0aGUgbWV0aG9kIGFyZ3VtZW50cwotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgQ2xhc3NbXSB0eXBlcywgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCU1ldGhvZCBtZXRob2Q9IG51bGw7Ci0JCXRyeSB7Ci0JCQltZXRob2Q9IGZDbGFzcy5nZXREZWNsYXJlZE1ldGhvZChtZXRob2ROYW1lLCB0eXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQXNzZXJ0LmlzTm90TnVsbChtZXRob2QpOwotCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBtZXRob2QuaW52b2tlKGZJbnN0YW5jZSwgYXJndW1lbnRzKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBPYmplY3QgdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXQoZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGJvb2xlYW4gdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXRCb29sZWFuKGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBpbnQgdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXRJbnQoZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIE9iamVjdCBnZXQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXQoZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuKFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0Qm9vbGVhbihmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgaW50IGdldEludChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldEludChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiAwOwotCX0KLQotCXByaXZhdGUgRmllbGQgZ2V0RmllbGQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpZWxkPSBmQ2xhc3MuZ2V0RGVjbGFyZWRGaWVsZChmaWVsZE5hbWUpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlyZXR1cm4gZmllbGQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBnZXRUeXBlcyhPYmplY3RbXSBvYmplY3RzKSB7Ci0JCWlmIChvYmplY3RzID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpbnQgbGVuZ3RoPSBvYmplY3RzLmxlbmd0aDsKLQkJQ2xhc3NbXSBjbGFzc2VzPSBuZXcgQ2xhc3NbbGVuZ3RoXTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQlBc3NlcnQuaXNOb3ROdWxsKG9iamVjdHNbaV0pOwotCQkJY2xhc3Nlc1tpXT0gb2JqZWN0c1tpXS5nZXRDbGFzcygpOwotCQl9Ci0JCXJldHVybiBjbGFzc2VzOwotCX0KLQotCXByaXZhdGUgdm9pZCBmYWlsKCkgewotCQlBc3NlcnQuaXNUcnVlKGZhbHNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRWNsaXBzZVRleHRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiNDgyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogVGVzdCBTdWl0ZSBmb3Igb3JnLmVjbGlwc2UudGV4dC4KLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFY2xpcHNlVGV4dFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIm9yZy5lY2xpcHNlLnRleHQgVGVzdCBTdWl0ZSB1c2luZyBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCS8vJEpVbml0LUJFR0lOJAotLy8JCXN1aXRlLmFkZFRlc3QoTGluZVRyYWNrZXJUZXN0NC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERvY3VtZW50RXh0ZW5zaW9uVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KExpbmVUcmFja2VyVGVzdDMuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEb2N1bWVudFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChGaW5kUmVwbGFjZURvY3VtZW50QWRhcHRlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChFeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dEVkaXRUZXN0cy5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQWRhcHRpdmVHYXBUZXh0VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRTdG9yZVRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChDaGlsZERvY3VtZW50VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFByb2plY3Rpb25UZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChMaW5rVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQ29weU9uV3JpdGVUZXh0U3RvcmVUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dFV0aWxpdGllc1Rlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBbm5vdGF0aW9uTW9kZWxTdHJlc3NUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uMlRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZW1wbGF0ZXNUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCS8vJEpVbml0LUVORCQKLQotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBjYzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0V4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRGVmYXVsdFBvc2l0aW9uVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklQb3NpdGlvblVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEV4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgSVBvc2l0aW9uVXBkYXRlciBmVXBkYXRlcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUlk9ICJ0ZXN0Y2F0ZWdvcnkiOwotCXByaXZhdGUgUG9zaXRpb24gZlBvczsKLQlwcml2YXRlIElEb2N1bWVudCBmRG9jOwotCS8qCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZVcGRhdGVyPSBuZXcgRGVmYXVsdFBvc2l0aW9uVXBkYXRlcihDQVRFR09SWSk7Ci0vLwkJZkRvYyA9IG5ldyBEb2N1bWVudCgiY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIik7Ci0JCWZEb2M9IGNyZWF0ZURvY3VtZW50KCJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiKTsKLQkJZlBvcz0gbmV3IFBvc2l0aW9uKDUsIDUpOwotCQlmRG9jLmFkZFBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MuYWRkUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JCWZEb2MuYWRkUG9zaXRpb24oQ0FURUdPUlksIGZQb3MpOwotCX0KLQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQkvKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jLnJlbW92ZVBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MucmVtb3ZlUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIwLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMjAsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFJpZ2h0QmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDUsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUF0T2Zmc2V0KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDUsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSaWdodEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgzLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmlnaHRBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgxMCwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlUmlnaHRBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgxMCwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFdpdGhpbigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg2LCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVXaXRoaW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNiwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygzLCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VMZWZ0Qm9yZGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDIsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDYsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VSaWdodEJvcmRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg5LCAyLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVPdmVyUmlnaHRCb3JkZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoOSwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNCwgNywgIiIpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmUG9zLmlzRGVsZXRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDcsICJ5eXl5eXl5Iik7Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGZQb3MuaXNEZWxldGVkKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL1Bvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL1Bvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5ZGIxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0KLQotcHVibGljIGNsYXNzIFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvY3VtZW50OwotCi0JcHVibGljIFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQb3NpdGlvbnMoUG9zaXRpb25bXSBleHBlY3RlZCkgdGhyb3dzIEJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb24gewotCQlQb3NpdGlvbltdIGFjdHVhbD0gZkRvY3VtZW50LmdldFBvc2l0aW9ucyhJRG9jdW1lbnQuREVGQVVMVF9DQVRFR09SWSk7Ci0JCWFzc2VydFRydWUoImludmFsaWQgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGFjdHVhbC5sZW5ndGggPT0gZXhwZWN0ZWQubGVuZ3RoKTsKLQotCQlmb3IgKGludCBpPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhwcmludChhY3R1YWxbaV0pICsgIiAhPSAiICsgcHJpbnQoZXhwZWN0ZWRbaV0pLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcHJpbnQoUG9zaXRpb24gcCkgewotCQlyZXR1cm4gIlsiICsgcC5nZXRPZmZzZXQoKSArICIsIiArIHAuZ2V0TGVuZ3RoKCkgKyAiXSI7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLS8vCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgieC14LXgteC14LXgteC14LXgteC14Iik7Ci0JCWZEb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoIngteC14LXgteC14LXgteC14LXgteCIpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDAsIDApKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbigwLCAxKSk7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oNSwgMCkpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDUsIDMpKTsKLQl9Ci0KLQlwcml2YXRlIElEb2N1bWVudCBjcmVhdGVEb2N1bWVudChTdHJpbmcgY29udGVudHMpIHsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZCgib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQkJZkRvY3VtZW50PSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50LnJlcGxhY2UoMCwgMCwgInl5Iik7Ci0KLQkJUG9zaXRpb25bXSBwb3NpdGlvbnM9IG5ldyBQb3NpdGlvbltdIHsKLQkJCQluZXcgUG9zaXRpb24oIDIsIDEpLAotCQkJCW5ldyBQb3NpdGlvbiggMiwgMCksCi0JCQkJbmV3IFBvc2l0aW9uKCA3LCAzKSwKLQkJCQluZXcgUG9zaXRpb24oIDcsIDApCi0JCX07Ci0KLQkJY2hlY2tQb3NpdGlvbnMocG9zaXRpb25zKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwNzdhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDE3NTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwuY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3ZDEwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jRnJpIE1hciAyNSAxNzozNDowMSBFU1QgMjAwNQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2Q9VVRGOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODZiMTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmFwYWNoZS54ZXJjZXMsCi0gb3JnLmVjbGlwc2UueHNkLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQ2xhc3NQYXRoOiBjYXRhbG9ndGVzdHMuamFyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZGRjMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuY2F0YWxvZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jYXRhbG9ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgY2F0YWxvZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9jYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2ExYmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9jYXRhbG9nMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiIHN5c3RlbUlkPSJJbnZvaWNlLmR0ZCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIi8+Ci0gIDx1cmkgY2hhY2hlZD0ibm8iIG5hbWU9Imh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiIHByb3BlcnR5PSJ2YWx1ZTIiIHVyaT0iZmlsZTovLy9Vc2Vycy9qZXNwZXIvRG9jdW1lbnRzL3dvcmtzcGFjZS1oZWxpb3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZzIueG1sIiBpZD0ibmV4dENhdGFsb2cxIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzExLXgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2NhdGFsb2cxMS14LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYTEyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzExLXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgaWQ9ImlkdmFsdWUxIiBwdWJsaWNJZD0iS3JvZWxsZWJvZWxsZSIgdXJpPSJodHRwOi8vdGVtcHVyaS5vcmciLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL29sZC1EVEQtbG9jYXRpb24ub3JnLyIgdXJpPSJodHRwOi8vd3d3Lm5ldy1sb2NhdGlvbi5jb20vIi8+Ci0gIDx1cmkgbmFtZT0idXJuOmZpc2h5OmZpc2giIHVyaT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgPHB1YmxpYyBpZD0iaWR2YWx1ZTIiIHB1YmxpY0lkPSJTbGVlcHkiIHVyaT0iaHR0cDovL3RlbXB1cmkub3JnIi8+Ci0gIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9vbGQtRFRELWxvY2F0aW9uLm9yZy8iIHVyaT0iaHR0cDovL3d3dy5uZXctbG9jYXRpb24uY29tLyIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZy54bWwiLz4KLSAgPGRlbGVnYXRlUHVibGljIGNhdGFsb2c9InRvbS54bWwiIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy8iLz4KLSAgPGRlbGVnYXRlU3lzdGVtIGNhdGFsb2c9ImZyaXR6LnhtbCIgc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDoiLz4KLSAgPGRlbGVnYXRlVVJJIGNhdGFsb2c9ImdhcmZpZWxkLnhtbCIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZvb2RzOmxhc2FnbmEiLz4KLSAgPHN5c3RlbVN1ZmZpeCBzeXN0ZW1JZFN1ZmZpeD0ic2NoZW1hcy9nb29mLnhtbCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLzIwMDkvZ29vZi12Mi54bWwiLz4KLSAgPHVyaVN1ZmZpeCB1cmk9ImZpbGU6Ly8vVXNlcnMvamVzcGVyL0RvY3VtZW50cy93b3Jrc3BhY2UtaGVsaW9zL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMvMjAwOS9mdW4tdjIueG1sIiB1cmlTdWZmaXg9InNjaGVtYXMvZ29vZi54bWwiLz4KLSAgPHJld3JpdGVTeXN0ZW0gcmV3cml0ZVByZWZpeD0iaHR0cDovL2NhY2hlLnNvbWUtcmVwb3NpdG9yeS5jb20vc2NoZW1lcy8iIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub3JpZ2luYWwtcmVwb3NpdG9yeS5jb20vc2NoZW1lcy8iLz4KLSAgPHJld3JpdGVVUkkgcmV3cml0ZVByZWZpeD0idXJuOmZ1bm55OiIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZ1bm55OiIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IUVMRU1FTlQgSW52b2ljZSAoSGVhZGVyLEl0ZW0rKT4KLTwhRUxFTUVOVCBIZWFkZXIgKERhdGUsQmlsbFRvKT4KLTwhQVRUTElTVCBIZWFkZXIKLSBpbnZvaWNlTnVtYmVyIENEQVRBICNSRVFVSVJFRAotPgotPCFFTEVNRU5UIEl0ZW0gKGRlc2NyaXB0aW9uKik+Ci08IUFUVExJU1QgSXRlbQotIHByaWNlIENEQVRBICNSRVFVSVJFRAotIGRpc2NvdW50IChwcm9tb3Rpb24gfCByZWd1bGFyKSAicmVndWxhciIKLT4KLTwhRUxFTUVOVCBEYXRlICgoTW9udGgsRGF5LFllYXIpfChEYXksTW9udGgsWWVhcikpPgotPCFFTEVNRU5UIEJpbGxUbyAoQWRkcmVzcyk+Ci08IUFUVExJU1QgQmlsbFRvCi0gY3VzdE51bWJlciBJRCAjUkVRVUlSRUQKLSBuYW1lIENEQVRBICNJTVBMSUVECi0gcGhvbmUgQ0RBVEEgI0lNUExJRUQKLT4KLTwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgQWRkcmVzcyAoc3RyZWV0MSxzdHJlZXQyPyxjaXR5LChzdGF0ZXxwcm92aW5jZSksemlwLGNvdW50cnk/KT4KLTwhRUxFTUVOVCBzdHJlZXQxICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdHJlZXQyICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjaXR5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdGF0ZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJvdmluY2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHppcCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY291bnRyeSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgTW9udGggKCNQQ0RBVEEpPgotPCFFTEVNRU5UIERheSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgWWVhciAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmZTM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkX3Rlc3QiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC1zY2hlbWEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY3MjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBlcnNvbm5lbCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCSAgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSdwZXJzb25hbC54c2QnPgotCi0gIDxwZXJzb24gaWQ9IkJpZy5Cb3NzIiA+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0ZTQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBwZXJzb25uZWwgKHBlcnNvbikrPgotCi08IUVMRU1FTlQgcGVyc29uIChuYW1lLGVtYWlsKix1cmwqLGxpbms/KT4KLTwhQVRUTElTVCBwZXJzb24gaWQgSUQgI1JFUVVJUkVEPgotPCFBVFRMSVNUIHBlcnNvbiBub3RlIENEQVRBICNJTVBMSUVEPgotPCFBVFRMSVNUIHBlcnNvbiBjb250ciAodHJ1ZXxmYWxzZSkgJ2ZhbHNlJz4KLTwhQVRUTElTVCBwZXJzb24gc2FsYXJ5IENEQVRBICNJTVBMSUVEPgotCi08IUVMRU1FTlQgbmFtZSAoKGZhbWlseSxnaXZlbil8KGdpdmVuLGZhbWlseSkpPgotCi08IUVMRU1FTlQgZmFtaWx5ICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGdpdmVuICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGVtYWlsICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIHVybCBFTVBUWT4KLTwhQVRUTElTVCB1cmwgaHJlZiBDREFUQSAnaHR0cDovLyc+Ci0KLTwhRUxFTUVOVCBsaW5rIEVNUFRZPgotPCFBVFRMSVNUIGxpbmsgbWFuYWdlciBJRFJFRiAjSU1QTElFRD4KLTwhQVRUTElTVCBsaW5rIHN1Ym9yZGluYXRlcyBJRFJFRlMgI0lNUExJRUQ+Ci0KLTwhTk9UQVRJT04gZ2lmIFBVQkxJQyAnLS8vQVBQL1Bob3Rvc2hvcC80LjAnICdwaG90b3Nob3AuZXhlJz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzZTQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBlcnNvbm5lbCBTWVNURU0gImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiPgotPHBlcnNvbm5lbD4KLQotICA8cGVyc29uIGlkPSJCaWcuQm9zcyI+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVlMzE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmVsIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbiIgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6dW5pcXVlIG5hbWU9InVuaXF1ZTEiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJwZXJzb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0ibmFtZS9naXZlbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJuYW1lL2ZhbWlseSIvPgotICA8L3hzOnVuaXF1ZT4KLSAgPHhzOmtleSBuYW1lPSdlbXBpZCc+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InBlcnNvbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAaWQiLz4KLSAgPC94czprZXk+Ci0gIDx4czprZXlyZWYgbmFtZT0ia2V5cmVmMSIgcmVmZXI9J2VtcGlkJz4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0icGVyc29uIi8+IAotICAgPHhzOmZpZWxkIHhwYXRoPSJsaW5rL0BtYW5hZ2VyIi8+ICAKLSAgPC94czprZXlyZWY+Ci0KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ibmFtZSIvPgotICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIiBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0idXJsIiAgIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rIiAgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9JzEnLz4KLSAgIDwveHM6c2VxdWVuY2U+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiAgdHlwZT0ieHM6SUQiIHVzZT0ncmVxdWlyZWQnLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRyIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgIDx4czpyZXN0cmljdGlvbiBiYXNlID0gInhzOnN0cmluZyI+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmYWxzZSIvPgotICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDwveHM6YXR0cmlidXRlPgotICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzYWxhcnkiIHR5cGU9InhzOmludGVnZXIiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmFsbD4KLSAgICA8eHM6ZWxlbWVudCByZWY9ImZhbWlseSIvPgotICAgIDx4czplbGVtZW50IHJlZj0iZ2l2ZW4iLz4KLSAgIDwveHM6YWxsPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImZhbWlseSIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJnaXZlbiIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJlbWFpbCIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJ1cmwiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iaHR0cDovLyIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImxpbmsiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hbmFnZXIiIHR5cGU9InhzOklEUkVGIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9InN1Ym9yZGluYXRlcyIgdHlwZT0ieHM6SURSRUZTIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOm5vdGF0aW9uIG5hbWU9J2dpZicgcHVibGljPSctLy9BUFAvUGhvdG9zaG9wLzQuMCcgc3lzdGVtPSdwaG90b3Nob3AuZXhlJy8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjYyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Njg2NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL3Rlc3QgQ2F0YWxvZ3VlLnhzZCAiPgotCTxncm91cCBuYW1lPSJ0ZXN0Ij4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGVzdDEiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIgLz4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIKLQkJCQkJCW1heE9jY3Vycz0iMCIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIgotCQlhYnN0cmFjdD0idHJ1ZSI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9IkNhdGFsb2d1ZSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9ImM6UHVibGljYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYmQ3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cG86cHVyY2hhc2VPcmRlciBvcmRlckRhdGU9IjIwMDEtMDEtMDEiIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5pYm0uY29tIFB1cmNoYXNlT3JkZXIueHNkIj4KLSAgPHNoaXBUbyBjb3VudHJ5PSJVUyI+Ci0gICAgPG5hbWU+QWxpY2UgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD4xMjUgTWFwbGUgU3RyZWV0PC9zdHJlZXQ+Ci0gICAgPGNpdHk+TWlsbCBWYWxsZXk8L2NpdHk+Ci0gICAgPHN0YXRlPkNBPC9zdGF0ZT4KLSAgICA8emlwPjkwOTUyPC96aXA+Ci0gIDwvc2hpcFRvPgotICA8YmlsbFRvIGNvdW50cnk9IlVTIj4KLSAgICA8bmFtZT5Sb2JlcnQgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD44IE9hayBBdmVudWU8L3N0cmVldD4KLSAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICA8c3RhdGU+UEE8L3N0YXRlPgotICAgIDx6aXA+OTU4MTk8L3ppcD4KLSAgPC9iaWxsVG8+Ci0gIDxwbzpjb21tZW50Pkh1cnJ5LCBteSBsYXduIGlzIGdvaW5nIHdpbGQhPC9wbzpjb21tZW50PgotICA8aXRlbXM+Ci0gICAgPGl0ZW0gcGFydE51bT0iODcyLUFBIj4KLSAgICAgIDxwcm9kdWN0TmFtZT5MYXdubW93ZXI8L3Byb2R1Y3ROYW1lPgotICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PgotICAgICAgPFVTUHJpY2U+MTQ4Ljk1PC9VU1ByaWNlPgotICAgICAgPHBvOmNvbW1lbnQ+Q29uZmlybSB0aGlzIGlzIGVsZWN0cmljPC9wbzpjb21tZW50PgotICAgIDwvaXRlbT4KLSAgICA8aXRlbSBwYXJ0TnVtPSI5MjYtQUEiPgotICAgICAgPHByb2R1Y3ROYW1lPkJhYnkgTW9uaXRvcjwvcHJvZHVjdE5hbWU+Ci0gICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+Ci0gICAgICA8VVNQcmljZT4zOS45ODwvVVNQcmljZT4KLSAgICAgIDxzaGlwRGF0ZT4yMDAxLTA3LTIxPC9zaGlwRGF0ZT4KLSAgICA8L2l0ZW0+Ci0gIDwvaXRlbXM+Ci08L3BvOnB1cmNoYXNlT3JkZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmYjA5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5pYm0uY29tIgotIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iPgotICAgIDxhbm5vdGF0aW9uPgotICAgICAgICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGV4YW1wbGUgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZWV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLgotICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgIDwvYW5ub3RhdGlvbj4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlT3JkZXIiIHR5cGU9InBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgdHlwZT0icG86VVNBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iIHR5cGU9InBvOlVTQWRkcmVzcyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiB0eXBlPSJwbzpJdGVtcyIvPgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVVNBZGRyZXNzIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdGF0ZSIgdHlwZT0icG86VVNTdGF0ZSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iemlwIiB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY291bnRyeSIgdHlwZT0iTk1UT0tFTiIgZml4ZWQ9IlVTIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJJdGVtcyI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvZHVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icXVhbnRpdHkiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXhFeGNsdXNpdmUgdmFsdWU9IjEwMCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlVTUHJpY2UiIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFydE51bSIgdHlwZT0icG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJDQSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUEEiPjwvZW51bWVyYXRpb24+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkFSIj48L2VudW1lcmF0aW9uPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmVhNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgQWRkcmVzc2VzIGZvciBJbnRlcm5hdGlvbmFsIFB1cmNoYXNlIG9yZGVyIHNjaGVtYQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJuYW1lIiAgIHR5cGU9InN0cmluZyIvPgotICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiB0eXBlPSJzdHJpbmciLz4KLSAgIDxlbGVtZW50IG5hbWU9ImNpdHkiICAgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2VxdWVuY2U+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJVU0FkZHJlc3MiPgotICA8Y29tcGxleENvbnRlbnQ+Ci0gICA8ZXh0ZW5zaW9uIGJhc2U9ImlwbzpBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0YXRlIiB0eXBlPSJpcG86VVNTdGF0ZSIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiICAgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvZXh0ZW5zaW9uPgotICA8L2NvbXBsZXhDb250ZW50PgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iVUtBZGRyZXNzIj4KLSAgPGNvbXBsZXhDb250ZW50PgotICAgPGV4dGVuc2lvbiBiYXNlPSJpcG86QWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0Y29kZSIgdHlwZT0iaXBvOlVLUG9zdGNvZGUiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXhwb3J0Q29kZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiBmaXhlZD0iMSIvPgotICAgPC9leHRlbnNpb24+Ci0gIDwvY29tcGxleENvbnRlbnQ+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDwhLS0gb3RoZXIgQWRkcmVzcyBkZXJpdmF0aW9ucyBmb3IgbW9yZSBjb3VudHJpZXMgLS0+IAotCi0gPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBSyIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBTCIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBUiIvPgotICAgPCEtLSBhbmQgc28gb24gLi4uIC0tPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotIDwhLS0gc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBmb3IgUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iUG9zdGNvZGUiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLSA8IS0tIHNpbXBsZSB0eXBlIGRlZmluaXRpb24gZm9yIFVLUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iVUtQb3N0Y29kZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJpcG86UG9zdGNvZGUiPgotICAgIDxwYXR0ZXJuIHZhbHVlPSJbQS1aXXsyfVxkXHNcZFtBLVpdezJ9Ii8+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi0KLTwvc2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDgzYWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08aXBvOnB1cmNoYXNlT3JkZXIKLSAgb3JkZXJEYXRlPSIyMDAxLTAxLTAxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIGlwby54c2QgIj4KLQotICAgIDxzaGlwVG8gZXhwb3J0Q29kZT0iMSIgeHNpOnR5cGU9ImlwbzpVS0FkZHJlc3MiPgotICAgICAgICA8bmFtZT5IZWxlbiBab2U8L25hbWU+Ci0gICAgICAgIDxzdHJlZXQ+NDcgRWRlbiBTdHJlZXQ8L3N0cmVldD4KLSAgICAgICAgPGNpdHk+Q2FtYnJpZGdlPC9jaXR5PgotICAgICAgICA8cG9zdGNvZGU+Q0IxIDFKUjwvcG9zdGNvZGU+Ci0gICAgPC9zaGlwVG8+Ci0KLSAgICA8YmlsbFRvIHhzaTp0eXBlPSJpcG86VVNBZGRyZXNzIj4KLSAgICAgICAgPG5hbWU+Um9iZXJ0IFNtaXRoPC9uYW1lPgotICAgICAgICA8c3RyZWV0PjggT2FrIEF2ZW51ZTwvc3RyZWV0PgotICAgICAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICAgICAgPHN0YXRlPkFSPC9zdGF0ZT4KLSAgICAgICAgPHppcD45NTgxOTwvemlwPgotICAgIDwvYmlsbFRvPgotCi0gICAgPGl0ZW1zPgotICAgICAgICA8aXRlbSBwYXJ0TnVtPSI4MzMtQUEiPgotICAgICAgICAgICAgPHByb2R1Y3ROYW1lPkxhcGlzIG5lY2tsYWNlPC9wcm9kdWN0TmFtZT4KLSAgICAgICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4KLSAgICAgICAgICAgIDxVU1ByaWNlPjk5Ljk1PC9VU1ByaWNlPgotICAgICAgICAgICAgPGlwbzpjb21tZW50PldhbnQgdGhpcyBmb3IgdGhlIGhvbGlkYXlzITwvaXBvOmNvbW1lbnQ+Ci0gICAgICAgICAgICA8c2hpcERhdGU+MTk5OS0xMi0wNTwvc2hpcERhdGU+Ci0gICAgICAgIDwvaXRlbT4KLSAgICA8L2l0ZW1zPgotPC9pcG86cHVyY2hhc2VPcmRlcj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2M2QwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgSW50ZXJuYXRpb25hbCBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZm9yIEV4YW1wbGUuY29tCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8IS0tIGluY2x1ZGUgYWRkcmVzcyBjb25zdHJ1Y3RzIC0tPgotIDxpbmNsdWRlCi0gIHNjaGVtYUxvY2F0aW9uPSJhZGRyZXNzLnhzZCIvPgotCi0gPGVsZW1lbnQgbmFtZT0icHVyY2hhc2VPcmRlciIgdHlwZT0iaXBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iICAgICB0eXBlPSJpcG86QWRkcmVzcyIvPgotICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtcyIgICAgICB0eXBlPSJpcG86SXRlbXMiLz4KLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJvcmRlckRhdGUiIHR5cGU9ImRhdGUiLz4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1zIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0iaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJwcm9kdWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJxdWFudGl0eSI+Ci0gICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJwb3NpdGl2ZUludGVnZXIiPgotICAgICAgICAgPG1heEV4Y2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iVVNQcmljZSIgICAgdHlwZT0iZGVjaW1hbCIvPgotICAgICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgICB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJ0TnVtIiB0eXBlPSJpcG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zZXF1ZW5jZT4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2ZDQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvXy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0gICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgeG1sbnM6aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyI+Ci0KLSA8YW5ub3RhdGlvbj4KLSAgPGRvY3VtZW50YXRpb24geG1sOmxhbmc9ImVuIj4KLSAgIEludGVybmF0aW9uYWwgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGZvciBFeGFtcGxlLmNvbQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPCEtLSBpbmNsdWRlIGFkZHJlc3MgY29uc3RydWN0cyAtLT4KLSA8aW5jbHVkZQotICBzY2hlbWFMb2NhdGlvbj0iYWRkcmVzc18ueHNkIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZU9yZGVyIiB0eXBlPSJpcG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiAgICAgIHR5cGU9ImlwbzpJdGVtcyIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iSXRlbXMiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InByb2R1Y3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InF1YW50aXR5Ij4KLSAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InBvc2l0aXZlSW50ZWdlciI+Ci0gICAgICAgICA8bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJVU1ByaWNlIiAgICB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiAgIHR5cGU9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9InBhcnROdW0iIHR5cGU9ImlwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NlcXVlbmNlPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlZDZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IHJlcG9ydC54c2QiPgotICAgIDxleDpyZWdpb25zPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjM5NDg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIiBxdWFudGl0eT0iMyIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjI5Mzg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIiBxdWFudGl0eT0iMzAiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMTkyODUiPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siIHF1YW50aXR5PSIxOSIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiIHF1YW50aXR5PSI4Ii8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgIDwvZXg6cmVnaW9ucz4KLQotICAgIDxleDpwYXJ0cz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiLz4KLSAgICA8L2V4OnBhcnRzPgotPC9leDpwdXJjaGFzZVJlcG9ydD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlN2NhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnI9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnhpcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGUgUmVwb3J0IFNjaGVtYSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4KLSAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICA8L2Fubm90YXRpb24+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHNjaGVtYUxvY2F0aW9uPSJpcG8ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDM0Y2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0Ij4KLSAgICA8ZXg6cmVnaW9ucz4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIzOTQ4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1BWCIgcXVhbnRpdHk9IjMiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIiBxdWFudGl0eT0iMyIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIyOTM4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9Ijg5Ny1KRCIgcXVhbnRpdHk9IjMwIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjE5Mjg1Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIiBxdWFudGl0eT0iMTkiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIiBxdWFudGl0eT0iOCIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICA8L2V4OnJlZ2lvbnM+Ci0KLSAgICA8ZXg6cGFydHM+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIi8+Ci0gICAgPC9leDpwYXJ0cz4KLTwvZXg6cHVyY2hhc2VSZXBvcnQ+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IyODRiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczpyPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczp4aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGFubm90YXRpb24+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIFJlcG9ydCBTY2hlbWEgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIAotICAgICAgICAgICAgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCi0gICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgPC9hbm5vdGF0aW9uPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiBzY2hlbWFMb2NhdGlvbj0iaXBvX18ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwYzgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zOmVyPSJodHRwOi8vb2FzaXMubmFtZXMudGMuZW50aXR5LnhtbG5zLnhtbC5jYXRhbG9nIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciCi0gICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8IS0tICRJZDogY2F0YWxvZy54c2QsdiAxLjEgMjAwNS8wNi8yNCAwNDoxNzo1MCBjc2FsdGVyIEV4cCAkIC0tPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InB1YklkQ2hhcnMiPgotICAgIDwhLS0gQSBzdHJpbmcgb2YgdGhlIGNoYXJhY3RlcnMgZGVmaW5lZCBhcyBwdWJJZENoYXIgaW4gcHJvZHVjdGlvbiAxMwotICAgICAgICAgb2YgdGhlIFNlY29uZCBFZGl0aW9uIG9mIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uLiBEb2VzIG5vdCBpbmNsdWRlCi0gICAgICAgICB0aGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSdyZSBub3JtYWxpemVkIGJ5IFhNTCBwYXJzaW5nLiAtLT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbYVwtekFcLVowXC05XC0nKCkrLC4vOj0/OyEqI0AkXyVdKiIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwdWJsaWNJZGVudGlmaWVyJz4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0iZXI6cHViSWRDaGFycyIvPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ncGFydGlhbFB1YmxpY0lkZW50aWZpZXInPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSdlcjpwdWJJZENoYXJzJy8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdzeXN0ZW1PclB1YmxpYyc+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3N5c3RlbScvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdwdWJsaWMnLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPCEtLSBUaGUgZ2xvYmFsIGF0dHJpYnV0ZSB4bWw6YmFzZSBpcyBub3QgZXhwbGljaXRseSBkZWNsYXJlZDsgLS0+Ci0gIDwhLS0gaXQgaXMgYWxsb3dlZCBieSB0aGUgYW55QXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gLS0+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2NhdGFsb2cnPgotICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCc+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpzeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6dXJpJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnJld3JpdGVTeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpuZXh0Q2F0YWxvZycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpncm91cCcvPgotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9JyMjb3RoZXInIHByb2Nlc3NDb250ZW50cz0nc2tpcCcvPgotICAgIDwveHM6Y2hvaWNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3B1YmxpYyc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YmxpY0lkIiB0eXBlPSJlcjpwdWJsaWNJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3N5c3RlbSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkIiB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ndXJpJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6YW55VVJJIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVTeXN0ZW0nPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW1JZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVVUkknPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmlJZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlUHVibGljJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iZXI6cGFydGlhbFB1YmxpY0lkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlU3lzdGVtJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHM6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdkZWxlZ2F0ZVVSSSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaVN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J25leHRDYXRhbG9nJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdncm91cCc+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjp1cmknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlUHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOm5leHRDYXRhbG9nJy8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdza2lwJy8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJjYXRhbG9nIiB0eXBlPSJlcjpjYXRhbG9nIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InB1YmxpYyIgdHlwZT0iZXI6cHVibGljIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InN5c3RlbSIgdHlwZT0iZXI6c3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InVyaSIgdHlwZT0iZXI6dXJpIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVTeXN0ZW0iIHR5cGU9ImVyOnJld3JpdGVTeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmV3cml0ZVVSSSIgdHlwZT0iZXI6cmV3cml0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVB1YmxpYyIgdHlwZT0iZXI6ZGVsZWdhdGVQdWJsaWMiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVTeXN0ZW0iIHR5cGU9ImVyOmRlbGVnYXRlU3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlVVJJIiB0eXBlPSJlcjpkZWxlZ2F0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJuZXh0Q2F0YWxvZyIgdHlwZT0iZXI6bmV4dENhdGFsb2ciLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9ImVyOmdyb3VwIi8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSW52b2ljZUlkX3Rlc3QiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiLz4KLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ibm8iIHByb3BlcnR5PSJ2YWx1ZTIiLz4KLSAgPG5leHRDYXRhbG9nIGNhdGFsb2c9ImNhdGFsb2cyLnhtbCIgaWQ9Im5leHRDYXRhbG9nMSIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM5NTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+IAotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlLnhzZCIgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAgICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDIiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPC9ncm91cD4KLSAgPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2NjEzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMmJhay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJDYXRhbG9ndWUueHNkIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAJCTx1cmkgbmFtZT0iaHR0cDovL0NhdGFsb2d1ZS54c2QiIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPC9ncm91cD4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg0NTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTxYTUxDYXRhbG9nU2V0dGluZ3M+DQotICA8VXNlckVudHJpZXM+DQotICAgIDxVc2VyRW50cnkgVFlQRT0iUFVCTElDIiBJRD0iSW52b2ljZUlkIiANCi1VUkk9InBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIvPg0KLSAgPC9Vc2VyRW50cmllcz4NCi08L1hNTENhdGFsb2dTZXR0aW5ncz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNzk0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSJJU08gODg3OToxOTg2IiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vc2Nyb2xsa2VlcGVyLnNvdXJjZWZvcmdlLm5ldC9kdGRzL3Njcm9sbGtlZXBlci1vbWYtMS4wL3Njcm9sbGtlZXBlci1vbWYuZHRkIiByZXdyaXRlUHJlZml4PSIvdXNyL3NoYXJlL3htbC9zY3JvbGxrZWVwZXIvZHRkcy9zY3JvbGxrZWVwZXItb21mLmR0ZCIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3Njcm9sbGtlZXBlci5zb3VyY2Vmb3JnZS5uZXQvZHRkcy9zY3JvbGxrZWVwZXItb21mLTEuMC9zY3JvbGxrZWVwZXItb21mLmR0ZCIgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS94bWwvc2Nyb2xsa2VlcGVyL2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nMTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxY2JiZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxjYXQ6Y2F0YWxvZw0KLSAgcHJlZmVyPSJzeXN0ZW0iDQotICB4bWxuczpjYXQ9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICB4bWxuczpjdXN0b209InVybjp4LXRlc3Q6c2NoZW1hIg0KLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCi0gIHhzaTpzY2hlbWFMb2NhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyAuLi94c2QveG1sY2F0YWxvZzExLnhzZCAiPg0KLQ0KLSAgPCEtLSBUaGUgb3JpZ2luYWwgb25lcyAtLT4NCi0gIDxjYXQ6cHVibGljIGlkPSJpZHZhbHVlMCIgcHVibGljSWQ9IiIgdXJpPSJodHRwOi8vdGVtcHVyaS5vcmciLz4NCi0gIDxjYXQ6cHVibGljIGlkPSJpZHZhbHVlMSIgcHVibGljSWQ9Iktyb2VsbGVib2VsbGUiIHVyaT0iaHR0cDovL3RlbXB1cmkub3JnIi8+DQotICA8Y2F0OnN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL29sZC1EVEQtbG9jYXRpb24ub3JnLyIgdXJpPSJodHRwOi8vd3d3Lm5ldy1sb2NhdGlvbi5jb20vIi8+DQotICA8Y2F0OnVyaSBuYW1lPSJ1cm46ZmlzaHk6ZmlzaCIgdXJpPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPg0KLSAgPGNhdDpuZXh0Q2F0YWxvZyBjYXRhbG9nPSJjYXRhbG9nLnhtbCIgY3VzdG9tOmN1c3RvbTE9InllcyIvPg0KLQ0KLSAgPCEtLSBUaGUgIm5ld2VyIiBvbmVzIChwYXJ0aWFsIHN1cHBvcnQgZnJvbSBXVFAgMy4xKSAtLT4NCi0gIDxjYXQ6ZGVsZWdhdGVQdWJsaWMgY2F0YWxvZz0idG9tLnhtbCIgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvLyIvPg0KLSAgPGNhdDpkZWxlZ2F0ZVN5c3RlbSBjYXRhbG9nPSJmcml0ei54bWwiIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ii8+DQotICA8Y2F0OmRlbGVnYXRlVVJJIGNhdGFsb2c9ImdhcmZpZWxkLnhtbCIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZvb2RzOmxhc2FnbmEiLz4NCi0NCi0gIDxjYXQ6cmV3cml0ZVN5c3RlbQ0KLSAgICBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9yaWdpbmFsLXJlcG9zaXRvcnkuY29tL3NjaGVtZXMvIg0KLSAgICByZXdyaXRlUHJlZml4PSJodHRwOi8vY2FjaGUuc29tZS1yZXBvc2l0b3J5LmNvbS9zY2hlbWVzLyIgLz4NCi0gIDxjYXQ6cmV3cml0ZVVSSQ0KLSAgICB1cmlTdGFydFN0cmluZz0idXJuOngtZnVubnk6Ig0KLSAgICByZXdyaXRlUHJlZml4PSJ1cm46ZnVubnk6IiAvPg0KLQ0KLSAgPGNhdDpzeXN0ZW1TdWZmaXgNCi0gICAgc3lzdGVtSWRTdWZmaXg9InNjaGVtYXMvZ29vZi54bWwiDQotICAgIHVyaT0iLi4vc2NoZW1hcy8yMDA5L2dvb2YtdjIueG1sIiAvPg0KLQ0KLSAgPGNhdDp1cmlTdWZmaXgNCi0gICAgdXJpU3VmZml4PSJzY2hlbWFzL2dvb2YueG1sIg0KLSAgICB1cmk9Ii4uL3NjaGVtYXMvMjAwOS9mdW4tdjIueG1sIiAvPg0KLSAgDQotICA8Y2F0Omdyb3VwIHByZWZlcj0icHVibGljIj4NCi0gICAgPGNhdDpwdWJsaWMgaWQ9ImlkdmFsdWUyIiBwdWJsaWNJZD0iU2xlZXB5IiB1cmk9Imh0dHA6Ly90ZW1wdXJpLm9yZyIgLz4NCi0gICAgPGNhdDpzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9vbGQtRFRELWxvY2F0aW9uLm9yZy8iIHVyaT0iaHR0cDovL3d3dy5uZXctbG9jYXRpb24uY29tLyIvPg0KLSAgPC9jYXQ6Z3JvdXA+DQotICANCi08L2NhdDpjYXRhbG9nPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgd2ViVVJMPSJodHRwOi8vd2ViVVJMIi8+Ci0gIDxzeXN0ZW0gc3lzdGVtSWQ9Ikludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ieWVzIiBwcm9wZXJ0eT0idmFsdWUxIi8+Ci0gIDx1cmkgbmFtZT0iaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIGNoYWNoZWQ9Im5vIiBwcm9wZXJ0eT0idmFsdWUyIi8+Ci0gIDxuZXh0Q2F0YWxvZyBjYXRhbG9nPSJjYXRhbG9nMi54bWwiIGlkPSJuZXh0Q2F0YWxvZzEiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjgzZGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLXB1Yi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmsxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJwb29seC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYm94LmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kb2Nib29reC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmszLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc24uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1udW0uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiY2VudHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrNC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJub3RueC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZGlhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmhpZXJ4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc28uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tY3lybC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tdGVjaC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2MuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9zb2V4dGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1jeXIyLmVudCIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RicG9vbHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZG9jYm9va3guZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJjZW50eC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYm5vdG54Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiaGllcngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjItMS4wLTE3LjIiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjdjZDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLSAgICAgICAgIHByZWZlcj0icHVibGljIj4KLSA8dXJpIG5hbWU9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAgCi0gPHN5c3RlbSBzeXN0ZW1JZD0ibXlleGFtcGxlLnhzZCIgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QiLz4gICAgCi0gICAgCi0gPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL0EvLyIKLSAgICAgICAgICAgICAgICAgY2F0YWxvZz0iZXhhbXBsZS1jYXRhbG9nMi54bWwiLz4KLQotICAgICAgICAgICAgICAgICAgIAotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YmIxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotICAgICAgICAgcHJlZmVyPSJwdWJsaWMiPgotIDxwdWJsaWMgcHVibGljSWQ9Ii0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgICAgICAgIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUuZW50Ii8+Ci08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhYWFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgcm9vdCBbCi0gPCFFTlRJVFkgdGV4dCBQVUJMSUMgIi0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgInVybjpwdWJsaWNpZDotOkE6WE1MK0NBVEFMT0crSURFTlRJRklFUjpFTiI+Ci1dPgotPHJvb3Q+JnRleHQ7PC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjk5OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHhzOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ieHM6YW55VVJJIi8+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTc1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHJvb3QgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQkgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibXlleGFtcGxlLnhzZCI+Ci1odHRwOi8vYXBhY2hlLm9yZy94bWwvYW55VVJJPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3Y2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cm9vdCAgeG1sbnM9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIj4KLWh0dHA6Ly9hcGFjaGUub3JnL3htbC9hbnlVUkk8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QwODc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSGVsbG8gd29ybGQhCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhMjlmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiPgotIDx4czplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9InhzOmFueVVSSSIvPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTI3YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0JcHJlZmVyPSJwdWJsaWMiPgotCQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0gICAgPCEtLSB3ZSBjYW4gbm90IG1hcCBQdWJsaWNJZCBvciBVUkkgb2YgdGhlIGluY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzIC0tPgkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzRlY2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLQlwcmVmZXI9InB1YmxpYyI+Ci0JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCIgLz4KLSAgICA8IS0tIHdlIGNhbiBub3QgbWFwIFB1YmxpY0lkIG9yIFVSSSBvZiB0aGUgaW5jbHVkZWQvcmVkZWZpbmVkIHNjaGVtYXMgLS0+CQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZCIgLz4KLQkKLQotCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmExYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0JPHN5c3RlbSBzeXN0ZW1JZD0iaXBvX18ueHNkIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWU0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjA0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHhtbDpiYXNlPSIuIj4KLSAgIAkJPHB1YmxpYyBwdWJsaWNJZD0ibXlxdW90ZSIgdXJpPSJxdW90ZTIueG1sIi8+ICAKLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2JhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi0gIDwhLS0gSSBiZWxvbmcgdG86Ci0gICAgICAgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZ0J1aWxkRmlsZVRlc3QuamF2YSAKLSAgICAgICAtLT4KLQotPHBhcmE+Ci0gIEEgc3RpdGNoIGluIHRpbWUgc2F2ZXMgbmluZQotPC9wYXJhPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjZDE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0KLTxwYXJhPgotICBObyBuZXdzIGlzIGdvb2QgbmV3cwotPC9wYXJhPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTJiMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4c2w6c3R5bGVzaGVldCAKLSAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gIHZlcnNpb249IjEuMCI+Ci0KLSAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+Ci0KLSAgPCEtLSBuYW1lIG9mIHRoZSBvdXRwdXQgcGFyYW1ldGVyIHRvIHdyaXRlIC0tPgotICA8eHNsOnBhcmFtIG5hbWU9Im91dHByb3AiPnZhbHVlPC94c2w6cGFyYW0+Ci0KLSAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkb3V0cHJvcCIvPjogPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMi54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IlJlZiI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkb2N1bWVudChAZmlsZSkvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMS54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRleHQoKSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5vcm1hbGl6ZS1zcGFjZSguKSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM3MzBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBmcmFnbWVudCBbCi0gIDwhRU5USVRZIHF1b3RlIFBVQkxJQyAibXlxdW90ZSIgInF1b3RlMS54bWwiPgotXT4KLQotPGZyYWdtZW50PgotICA8cGFyYT4KLSAgICAgICZxdW90ZTsKLSAgPC9wYXJhPgotPC9mcmFnbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQxZDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi08ZnJhZ21lbnQ+Ci0gIDxwYXJhPgotICAgIDxSZWYgZmlsZT0ieG1sY2F0YWxvZzEueG1sIi8+Ci0gIDwvcGFyYT4KLTwvZnJhZ21lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3ZmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdHZhbHVlOiBBIHN0aXRjaCBpbiB0aW1lIHNhdmVzIG5pbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQtZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3YTVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08PDw8IHRlc3R2YWx1ZTogQSBzdGl0Y2ggaW4gdGltZSBzYXZlcyBuaW5lDQotPDw8PCB0ZXN0dmFsdWU6IE5vIG5ld3MgaXMgZ29vZCBuZXdzDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1yZXN1bHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRlMjhhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3R2YWx1ZTogTm8gbmV3cyBpcyBnb29kIG5ld3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QvWFNMU2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk2NDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPCEtLSB4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIgLy0tPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InN0eWxlc2hlZXQiIHR5cGU9IndyYXBwZXIiIC8+Ci0JPHhzZDplbGVtZW50IG5hbWU9InRyYW5zZm9ybSIgdHlwZT0id3JhcHBlciIgLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id3JhcHBlciI+Ci0JCTx4c2Q6Z3JvdXAgcmVmPSJ0b3BMZXZlbEVsZW1lbnRzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6SUQiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wb3J0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImluY2x1ZGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJpcC1zcGFjZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0icHJlc2VydmUtc3BhY2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im91dHB1dCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh0bWwiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0IiAvPgotCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJPC94c2Q6YXR0cmlidXRlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvbWl0LXhtbC1kZWNsYXJhdGlvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic3RhbmRhbG9uZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiIHR5cGU9InhzZDpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImluZGVudCIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ia2V5Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlY2ltYWwtZm9ybWF0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0iZGVjaW1hbC1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIsIiBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJJbmZpbml0eSIgbmFtZT0iaW5maW5pdHkiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSItIiBuYW1lPSJtaW51cy1zaWduIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iTmFOIiBuYW1lPSJOYU4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIlIiBuYW1lPSJwZXJjZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0i4oCwIiBuYW1lPSJwZXItbWlsbGUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIwIiBuYW1lPSJ6ZXJvLWRpZ2l0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iIyIgbmFtZT0iZGlnaXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSI7IiBuYW1lPSJwYXR0ZXJuLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZXNwYWNlLWFsaWFzIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InN0eWxlc2hlZXQtcHJlZml4IiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icmVzdWx0LXByZWZpeCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idGVtcGxhdGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQkJCTx4c2Q6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIiAvPgotCQkJCTwveHNkOmNob2ljZT4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InByaW9yaXR5IiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZS1vZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb3B5LW9mIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3QtcmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJzaW5nbGUiIG5hbWU9ImxldmVsIj4KLQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5nbGUiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdWx0aXBsZSIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFueSIgLz4KLQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvdW50IiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJmcm9tIiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iMSIgbmFtZT0iZm9ybWF0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxldHRlci12YWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNpemUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImFwcGx5LXRlbXBsYXRlcyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJzb3J0IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndpdGgtcGFyYW0iIC8+Ci0JCQk8L3hzZDpjaG9pY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJub2RlKCkiIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBseS1pbXBvcnRzIj4KLQkJPHhzZDpjb21wbGV4VHlwZSAvPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2giPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ic29ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQk8eHNkOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCQkJPHhzZDphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiIC8+Ci0JCQkJPC94c2Q6Y2hvaWNlPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9InNvcnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9InRleHQiIG5hbWU9ImRhdGEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9ImFzY2VuZGluZyIgbmFtZT0ib3JkZXIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjYXNlLW9yZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNob29zZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndoZW4iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ib3RoZXJ3aXNlIiBtaW5PY2N1cnM9IjAiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aGVuIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdGhlcndpc2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlLXNldCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCAgcmVmPSJhdHRyaWJ1dGUiICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNkOk5NVE9LRU5TIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYWxsLXRlbXBsYXRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0id2l0aC1wYXJhbSIgbWluT2NjdXJzPSIwIiAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiICAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0id2l0aC1wYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJwYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXh0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtZW50Ij4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlLWF0dHJpYnV0ZS1zZXRzIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29tbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNvcHkiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2UtYXR0cmlidXRlLXNldHMiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0ibm8iIG5hbWU9InRlcm1pbmF0ZSIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImZhbGxiYWNrIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTwveHNkOmNob2ljZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPHhzZDplbGVtZW50IHJlZj0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbW1lbnQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJlbGVtZW50IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXR0cmlidXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9ImNoYXItaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhcHBseS10ZW1wbGF0ZXMiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjYWxsLXRlbXBsYXRlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXBwbHktaW1wb3J0cyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZvci1lYWNoIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idmFsdWUtb2YiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjb3B5LW9mIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibnVtYmVyIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY2hvb3NlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaWYiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXh0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY29weSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InZhcmlhYmxlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibWVzc2FnZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZhbGxiYWNrIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9InRvcExldmVsRWxlbWVudHMiPgotCQk8eHNkOmNob2ljZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcG9ydCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImluY2x1ZGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJzdHJpcC1zcGFjZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InByZXNlcnZlLXNwYWNlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ia2V5IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZGVjaW1hbC1mb3JtYXQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhdHRyaWJ1dGUtc2V0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibmFtZXNwYWNlLWFsaWFzIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im91dHB1dCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRlbXBsYXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iWWVzTm9UeXBlIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InllcyIgLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIiAvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lZEFuZFNlbGVjdGFibGUiIG1peGVkPSJ0cnVlIj4KLQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3Qtb3B0aW9uYWwiIC8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJleHByZXNzaW9uIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwYXR0ZXJuIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3Qtb3B0aW9uYWwiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3QtcmVxdWlyZWQiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJZZXNOb1R5cGUiIGRlZmF1bHQ9Im5vIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEveHNkL3htbGNhdGFsb2cxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QveG1sY2F0YWxvZzExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4MmQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QveG1sY2F0YWxvZzExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLSAgICAgICAgICAgeG1sbnM6ZXI9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+DQotDQotICA8IS0tICRJZDogeG1sY2F0YWxvZzExLnhzZCx2IDEuMSAyMDEwLzAzLzA4IDIwOjQ0OjMwIGptb2xsZXIgRXhwICQgLS0+DQotDQotICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+DQotDQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJJZENoYXJzIj4NCi0gICAgPCEtLSBBIHN0cmluZyBvZiB0aGUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIHB1YklkQ2hhciBpbiBwcm9kdWN0aW9uIDEzDQotICAgICAgICAgb2YgdGhlIFNlY29uZCBFZGl0aW9uIG9mIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uLiBEb2VzIG5vdCBpbmNsdWRlDQotICAgICAgICAgdGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkncmUgbm9ybWFsaXplZCBieSBYTUwgcGFyc2luZy4gLS0+DQotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbYS16QS1aMC05XC0nXChcKSssLi86PT87ISojQCRfJV0qIi8+DQotICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICA8L3hzOnNpbXBsZVR5cGU+DQotDQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJsaWNJZGVudGlmaWVyIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9ImVyOnB1YklkQ2hhcnMiLz4NCi0gIDwveHM6c2ltcGxlVHlwZT4NCi0NCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InBhcnRpYWxQdWJsaWNJZGVudGlmaWVyIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9ImVyOnB1YklkQ2hhcnMiLz4NCi0gIDwveHM6c2ltcGxlVHlwZT4NCi0NCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InN5c3RlbU9yUHVibGljIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InB1YmxpYyIvPg0KLSAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgPC94czpzaW1wbGVUeXBlPg0KLQ0KLSAgPCEtLSBUaGUgZ2xvYmFsIGF0dHJpYnV0ZSB4bWw6YmFzZSBpcyBub3QgZXhwbGljaXRseSBkZWNsYXJlZDsgLS0+DQotICA8IS0tIGl0IGlzIGFsbG93ZWQgYnkgdGhlIGFueUF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuIC0tPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImNhdGFsb2ciPg0KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOnVyaSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVVSSSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6dXJpU3VmZml4Ii8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW1TdWZmaXgiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpkZWxlZ2F0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6ZGVsZWdhdGVVUkkiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOm5leHRDYXRhbG9nIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpncm91cCIvPg0KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4NCi0gICAgPC94czpjaG9pY2U+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJlZmVyIiB0eXBlPSJlcjpzeXN0ZW1PclB1YmxpYyIvPg0KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icHVibGljIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWQiIHR5cGU9ImVyOnB1YmxpY0lkZW50aWZpZXIiDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic3lzdGVtIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWQiIHR5cGU9InhzOnN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gICAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ1cmkiPg0KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czphbnlVUkkiDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icmV3cml0ZVN5c3RlbSI+DQotICAgIDx4czpjb21wbGV4Q29udGVudD4NCi0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InJld3JpdGVVUkkiPg0KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmlTdGFydFN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV3cml0ZVByZWZpeCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic3lzdGVtU3VmZml4Ij4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWRTdWZmaXgiDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idXJpU3VmZml4Ij4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3VmZml4Ig0KLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHM6c3RyaW5nIg0KLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRlbGVnYXRlUHVibGljIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWRTdGFydFN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImVyOnBhcnRpYWxQdWJsaWNJZGVudGlmaWVyIg0KLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gICAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSI+DQotICAgIDx4czpjb21wbGV4Q29udGVudD4NCi0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRlbGVnYXRlVVJJIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5leHRDYXRhbG9nIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ3JvdXAiPg0KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOnVyaSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVVSSSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6dXJpU3VmZml4Ii8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW1TdWZmaXgiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpkZWxlZ2F0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6ZGVsZWdhdGVVUkkiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOm5leHRDYXRhbG9nIi8+DQotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPg0KLSAgICA8L3hzOmNob2ljZT4NCi0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcmVmZXIiIHR5cGU9ImVyOnN5c3RlbU9yUHVibGljIi8+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImNhdGFsb2ciIHR5cGU9ImVyOmNhdGFsb2ciLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InB1YmxpYyIgdHlwZT0iZXI6cHVibGljIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJzeXN0ZW0iIHR5cGU9ImVyOnN5c3RlbSIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idXJpIiB0eXBlPSJlcjp1cmkiLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVTeXN0ZW0iIHR5cGU9ImVyOnJld3JpdGVTeXN0ZW0iLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVVUkkiIHR5cGU9ImVyOnJld3JpdGVVUkkiLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InN5c3RlbVN1ZmZpeCIgdHlwZT0iZXI6c3lzdGVtU3VmZml4Ii8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJ1cmlTdWZmaXgiIHR5cGU9ImVyOnVyaVN1ZmZpeCIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVQdWJsaWMiIHR5cGU9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSIgdHlwZT0iZXI6ZGVsZWdhdGVTeXN0ZW0iLz4NCi0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlVVJJIiB0eXBlPSJlcjpkZWxlZ2F0ZVVSSSIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibmV4dENhdGFsb2ciIHR5cGU9ImVyOm5leHRDYXRhbG9nIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0iZXI6Z3JvdXAiLz4NCi0NCi08L3hzOnNjaGVtYT4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MzhjOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYTUwgQ2F0YWxvZyBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNzVjNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuY2F0YWxvZ0NvbnRyaWJ1dGlvbnMiPgotCSAgPGNhdGFsb2dDb250cmlidXRpb24+IAotICAgICAgICAgICA8c3lzdGVtIGlkPSJ0ZXN0U3lzdGVtSWQiCi0gICAgICAgICAgICAgICBzeXN0ZW1JZD0iaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiPiAKLSAgICAgICAgICAgICAgIDwvc3lzdGVtPgotICAgICAgICAgICA8cHVibGljIGlkPSJ0ZXN0UHVibGljSWQxIgotICAgICAgICAgICAgICAgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IgotICAgICAgICAgICAgICAgdXJpPSJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiCi0gICAgICAgICAgICAgICB3ZWJVUkw9Imh0dHA6Ly9vcmcuZWNsaXBzZS53c3QueG1sLmV4YW1wbGUvSW52b2ljZS5kdGQiPgotICAgICAgICAgIDwvcHVibGljPgotICAgICAgICAgIDx1cmkgaWQ9InRlc3RVcmlJZDEiCi0gICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIgCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAKLSAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VVJJSWQyIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgICAgICB1cmk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIj4KLSAgICAgICAgICA8L3VyaT4gCi0gICAgICAgICAgPG5leHRDYXRhbG9nIGlkPSJ0ZXN0TmVzdGVkQ2F0YWxvZyIKLSAgICAgICAgICAgICAgIGNhdGFsb2c9ImRhdGEvY2F0YWxvZzEueG1sIi8+IAotICAgICAgIDwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4gCi0JPC9leHRlbnNpb24+IAotICAgCi0gCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiNjNkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BYnN0cmFjdENhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHByaXZhdGUgQ2F0YWxvZ1NldCBjYXRhbG9nU2V0ID0gbmV3IENhdGFsb2dTZXQoKTsKLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgc3lzdGVtQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyB1c2VyQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBkZWZhdWx0Q2F0YWxvZzsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgQWJzdHJhY3RDYXRhbG9nVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIExpc3QgZ2V0Q2F0YWxvZ0VudHJpZXMoSUNhdGFsb2cgY2F0YWxvZywgaW50IGVudHJ5VHlwZSkKLSAgICB7Ci0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJQ2F0YWxvZ0VudHJ5W10gZW50cmllcyA9IGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gZW50cmllc1tpXTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBlbnRyeVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGdldENhdGFsb2coU3RyaW5nIGlkLCBTdHJpbmcgdXJpU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCQlyZXR1cm4gY2F0YWxvZ1NldC5sb29rdXBPckNyZWF0ZUNhdGFsb2coaWQsIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIAotCi0gICAgcHVibGljIHZvaWQgaW5pdENhdGFsb2dzKCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTmV4dENhdGFsb2cgY2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLSAgICAgICAgICAgIElDYXRhbG9nIHJlZmVyZW5jZWRDYXRhbG9nID0gY2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRDYXRhbG9nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKFhNTENvcmVQbHVnaW4uU1lTVEVNX0NBVEFMT0dfSUQKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMocmVmZXJlbmNlZENhdGFsb2cuZ2V0SWQoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1DYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJDYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgICAgICBpbml0Q2F0YWxvZ3MoKTsKLSAgICB9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgbWFrZUFic29sdXRlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBsb2NhdGlvbikKLQkgIHsKLQkJICBVUkwgbG9jYWwgPSBudWxsOwotCQkgIGxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgnXFwnLCAnLycpOwotCQkgIHRyeQotCQkgIHsKLQkJCSAgVVJMIGJhc2VVUkwgPSBuZXcgVVJMKGJhc2VMb2NhdGlvbik7Ci0JCQkgIGxvY2FsID0gbmV3IFVSTChiYXNlVVJMLCBsb2NhdGlvbik7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgIH0KLQkJICAKLQkJICBpZiAobG9jYWwgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIHJldHVybiBsb2NhbC50b1N0cmluZygpOwotCQkgIH0gZWxzZQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2F0aW9uOwotCQkgIH0KLQkgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCByZXNvbHZlUGx1Z2luTG9jYXRpb24oU3RyaW5nIHBsdWdpbklkKXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJewotCQkJVVJMIGJ1bmRsZUVudHJ5ID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQl0cnkKLQkJCXsKLQkJCQlyZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShidW5kbGVFbnRyeSk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8vIHNlZSBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aChTdHJpbmcgcGF0aCkgCi0JICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVQYXRoKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHBhdGgpIAotCSAgewotCi0JCSAgcmV0dXJuICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aCggCi0JCQkJICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5nZXRQbGF0Zm9ybVVSTChwbHVnaW5JZCksIHBhdGgpOwotCSAgfQotCSAgCi0JICAKLQkgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZUxvY2F0aW9uKFN0cmluZyBwYXRoKSB7Ci0JCSAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCSAgdHJ5IHsKLQkJCXJlc3VsdCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTChGaWxlTG9jYXRvci5maW5kKFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aChwYXRoKSwgbnVsbCkpLnRvU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0JCXJldHVybiBVUklIZWxwZXIuZW5zdXJlRmlsZVVSSVByb3RvY29sRm9ybWF0KHJlc3VsdCk7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjU4YzdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgKLQkJCQkiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1JlYWRlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nV3JpdGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1Rlc3QuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci0gICAgCi0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwMDFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0Ci17Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlYWRSZWdpc3RyeSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVmYXVsdENhdGFsb2cpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWE1MQ29yZVBsdWdpbi5ERUZBVUxUX0NBVEFMT0dfSUQsIGRlZmF1bHRDYXRhbG9nLmdldElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCkubGVuZ3RoKTsKLQotCQlTdHJpbmcgcGx1Z2luSWQgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKTsKLSAgICAKLQkJICAvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0gICAgICAgIGFzc2VydE5vdE51bGwoc3lzdGVtQ2F0YWxvZyk7Ci0gICAgICAgIExpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0U3lzdGVtSWQiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0gICAgICAgIGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhzeXN0ZW1DYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsgICAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoaSk7Ci0JCQlpZigidGVzdFB1YmxpY0lkMSIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzCi0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LnhtbC5leGFtcGxlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkJfQotCQkJCi0JCQllbHNlIGlmKCJ0ZXN0TWFwcGluZ0luZm8iLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYTEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JICAgICAKLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdXJpIGVudHJpZXMKLSAgICAgICAgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0VVJJSWQxIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJICBTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIpOwotCQkJICAgICAgYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMiIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMyIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiamFyOnBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICAgIAotICAgICAgICAvLyB0ZXN0IHRlc3RlZCBjYXRhbG9nCi0gICAgICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IHN5c3RlbUNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1tpXTsKLQkJCWlmKCJ0ZXN0TmVzdGVkQ2F0YWxvZyIuZXF1YWxzKG5leHRDYXRhbG9nRW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL2NhdGFsb2cxLnhtbCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nTG9jYXRpb24oKSk7Ci0JCQkJSUNhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDMsIG5leHRDYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCS8vVVJJIHVyaSA9IFVSSUhlbHBlci5nZXRVUklGb3JGaWxlUGF0aChyZXNvbHZlZFVSSSk7Ci0JCQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUodXJpLnRvVVJMKCksICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCBzeXN0ZW0gZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJCS8vIHRlc3QgdXJpIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZWFkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZGQwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLQotcHVibGljIGNsYXNzIENhdGFsb2dSZWFkZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZWFkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZENhdGFsb2coKXRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9TdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQotCQkKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3dlYlVSTCIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJ3ZWJVUkwiKSk7Ci0KLQkJCi0JCS8vICB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfU1lTVEVNKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygieWVzIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUxIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0KLQkJLy8gIHRlc3QgdXJpIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCQkKLQkJLy8gIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQkKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nRW50cnkgPSAoSU5leHRDYXRhbG9nKW5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQkJCi0vLwkJU3RyaW5nIGNhdGFsb2dSZWZJZCA9IG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ1JlZklkKCk7Ci0vLwkJYXNzZXJ0RXF1YWxzKCJuZXh0Q2F0YWxvZzEiLCBjYXRhbG9nUmVmSWQpOwotCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShiYXNlLCAiY2F0YWxvZzIueG1sIik7Ci0JCWFzc2VydEVxdWFscygiY2F0YWxvZzIueG1sIiwgbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nTG9jYXRpb24oKSk7Ci0KLQkJSUNhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0KLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZyk7Ci0JCWFzc2VydEVxdWFscyg0LCBuZXh0Q2F0YWxvZy5nZXRDYXRhbG9nRW50cmllcygpLmxlbmd0aCk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygyLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCS8vcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKG5leHRDYXRhbG9nLmdldEJhc2UoKSwgIi4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyeSBmcm9tIGEgZ3JvdXAKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgxKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oIi9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMiIsIGVudHJ5LmdldEtleSgpKTsKLQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJDYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkKLQotCX0KLQotCS8qCi0JICogQ2xhc3MgdW5kZXIgdGVzdCBmb3Igdm9pZCByZWFkKElDYXRhbG9nLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlYWRDb21wbGV4Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZzExLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY2F0YWxvZzExIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEzLCBjYXRhbG9nLmdldENhdGFsb2dFbGVtZW50cygpLmxlbmd0aCk7Ci0JCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMiwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQykuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMiwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSkuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMSwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSkuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCBuZXh0IGNhdGFsb2cgLSBjYXRhbG9nMi54bWwKLQkJSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIG5leHRDYXRhbG9nRW50cmllcy5sZW5ndGgpOwotCQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpbmV4dENhdGFsb2dFbnRyaWVzWzBdOwotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nRW50cnkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJjYXRhbG9nLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wYXRhYmlsaXR5UmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vCXJlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZyI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY29tcGF0YWJpbGl0eUNhdGFsb2ciLCBiYXNlLnRvU3RyaW5nKCkpOwotCQkvL0NhdGFsb2dSZWFkZXIucmVhZChjYXRhbG9nLCBjYXRhbG9nRmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2cpOwotCQlMaXN0IGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoInBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGY0NTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nUmVzb2x2ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZXNvbHZlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlc29sdmVSZXNvbHZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQotCQotCQkvLyBmcm9tIHBsdWdpbi54bWwgZmlsZQotCQlTdHJpbmcgcGx1Z2luQmFzZSA9IHJlc29sdmVQbHVnaW5Mb2NhdGlvbihUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSkudG9TdHJpbmcoKTsKLQotCQlTdHJpbmcgcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JCXJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgoIiIsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCByZXNvbHZlZFVSSSk7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMS54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMi54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJDYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQl9Ci0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhZmMzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgQ2F0YWxvZyB3b3JraW5nVXNlckNhdGFsb2cgPSBuZXcgQ2F0YWxvZyhudWxsLCAid29ya2luZyIsIG51bGwpOwotICAgICAgIGFzc2VydE5vdE51bGwodXNlckNhdGFsb2cpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2codXNlckNhdGFsb2cpOwotICAgICAgIAotICAgICAgIElDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0gICAgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0gICAgICAgd29ya2luZ1VzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0gICAgIAotICAgICAgIHVzZXJDYXRhbG9nLmFkZEVudHJpZXNGcm9tQ2F0YWxvZyh3b3JraW5nVXNlckNhdGFsb2cpOwotCSAgIFN0cmluZyB1c2VyQ2F0YWxvZ0xvY2F0aW9uID0gdXNlckNhdGFsb2cuZ2V0TG9jYXRpb24oKTsKLQkgIAotICAgICAgIHVzZXJDYXRhbG9nLnNhdmUoKTsKLSAgICAgICB1c2VyQ2F0YWxvZy5jbGVhcigpOwotICAgICAgIAotICAgICAgIHVzZXJDYXRhbG9nID0gZ2V0Q2F0YWxvZyhYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRCwgdXNlckNhdGFsb2dMb2NhdGlvbik7Ci0gICAgICAgCi0gICAgICAgTGlzdCBlbnRyaWVzID0gZ2V0Q2F0YWxvZ0VudHJpZXModXNlckNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotICAgICAKLSAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly90ZXN0dXJpIiwgZW50cnkuZ2V0VVJJKCkpOwotICAgICAgIGFzc2VydEVxdWFscygidGVzdEtleSIsIGVudHJ5LmdldEtleSgpKTsKLQotICAgCi0gICAgfQotCi0KLSAgIAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmZDcwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nV3JpdGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nV3JpdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0V3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0JCQkJY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgdGVzdENhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCByZXNvbHZlZFVSTAotCQkJCS50b1N0cmluZygpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0JCXRlc3RDYXRhbG9nLnNldEJhc2UocmVzb2x2ZWRVUkwudG9TdHJpbmcoKSk7Ci0JCS8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0KLQkJLy8gd3JpdGUgY2F0YWxvZwotCQlVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSIvIik7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChGaWxlTG9jYXRvci5yZXNvbHZlKHJlc3VsdHNGb2xkZXIpLmdldEZpbGUoKSk7Ci0JCVN0cmluZyByZXN1bHRDYXRhbG9nRmlsZSA9IHBhdGguYXBwZW5kKCIvY2F0YWxvZzEueG1sIikudG9GaWxlKCkudG9VUkkoKS50b1N0cmluZygpOwotCQl0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCQotCQkKLQkJCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJdGVzdENhdGFsb2cuc2F2ZSgpOwotCQkKLQkJLy8gcmVhZCBjYXRhbG9nIGZpbGUgZnJvbSB0aGUgc2F2ZWQgbG9jYXRpb24gYW5kIHRlc3QgaXRzIGNvbnRlbnQKLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgdGVzdENhdGFsb2cuZ2V0TG9jYXRpb24oKSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJCi0JCQotCQkvLyB0ZXN0IHNhdmVkIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93ZWJVUkwiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCS8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQkKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0QnVnMjM1NDQ1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAvLyByZWFkIGNhdGFsb2cKLSAgICAgIFN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sIjsKLSAgICAgIFVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0gICAgICAgICAgICAgIGNhdGFsb2dGaWxlKTsKLSAgICAgIGFzc2VydE5vdE51bGwoY2F0YWxvZ1VybCk7Ci0gICAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0gICAgICBDYXRhbG9nIHRlc3RDYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImRlbGV0ZW1lY2F0YWxvZyIsIHJlc29sdmVkVVJMCi0gICAgICAgICAgICAgIC50b1N0cmluZygpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotICAgICAgdGVzdENhdGFsb2cuc2V0QmFzZShyZXNvbHZlZFVSTC50b1N0cmluZygpKTsKLSAgICAgIC8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotCi0gICAgICAvLyB3cml0ZSBjYXRhbG9nCi0gICAgICBVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotICAgICAgICAgICAgICAiLyIpOwotICAgICAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKEZpbGVMb2NhdG9yLnJlc29sdmUocmVzdWx0c0ZvbGRlcikuZ2V0RmlsZSgpKTsKLSAgICAgIGZpbmFsIEZpbGUgY2F0YWxvZ0lPRmlsZSA9IHBhdGguYXBwZW5kKCIvZGVsZXRlbWVjYXRhbG9nLnhtbCIpLnRvRmlsZSgpOwotICAgICAgU3RyaW5nIHJlc3VsdENhdGFsb2dGaWxlID0gY2F0YWxvZ0lPRmlsZS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICB0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0gICAgICAKLSAgICAgIC8vIHdyaXRlIGNhdGFsb2cKLSAgICAgIHRlc3RDYXRhbG9nLnNhdmUoKTsKLSAgICAgIAotICAgICAgSVdvcmtzcGFjZVJ1bm5hYmxlIGRlbGV0ZU9wID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjYXRhbG9nSU9GaWxlLmRlbGV0ZSgpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJleGNlcHRpb24gdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBjYXRhbG9nIiwgZmFsc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihkZWxldGVPcCwgbnVsbCk7Ci0gICAgICBhc3NlcnRGYWxzZSgiY2F0YWxvZyBmaWxlIHdhcyBub3QgZGVsZXRlZCIsIGNhdGFsb2dJT0ZpbGUuZXhpc3RzKCkpOwotICAgIH0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEFuZFdyaXRlQ29tcGxleENhdGFsb2coKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvL3JlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxMSIsIGJhc2UudG9TdHJpbmcoKSk7Ci0JCS8vQ2F0YWxvZ1JlYWRlci5yZWFkKGNhdGFsb2csIGNhdGFsb2dGaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJLy8gdGVzdCBtYWluIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJLy9hc3NlcnRFcXVhbHMoImNhdDEiLCBjYXRhbG9nLmdldElkKCkpOwotCQlhc3NlcnRFcXVhbHMoMTMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VsZW1lbnRzKCkubGVuZ3RoKTsKLQotCQkvLyB3cml0ZSBjYXRhbG9nIHNvIHdlIGNhbiByZWFkIGl0IGJhY2sgaW4KLQkJVVJMIHJlc3VsdHNGb2xkZXIgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgKLQkJCQkiLyIpOwotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoRmlsZUxvY2F0b3IucmVzb2x2ZShyZXN1bHRzRm9sZGVyKS5nZXRGaWxlKCkpOwotCQlTdHJpbmcgcmVzdWx0Q2F0YWxvZ0ZpbGUgPSBwYXRoLmFwcGVuZCgiL2NhdGFsb2cxMS14LnhtbCIpLnRvRmlsZSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKLQkJY2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCQotCQkKLQkJCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJY2F0YWxvZy5zYXZlKCk7Ci0JCQotCQkvLyByZWFkIGNhdGFsb2cgZmlsZSBmcm9tIHRoZSBzYXZlZCBsb2NhdGlvbiBhbmQgdGVzdCBpdHMgY29udGVudAotCQljYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgY2F0YWxvZy5nZXRMb2NhdGlvbigpKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQotCQkvLyB0ZXN0IG1haW4gY2F0YWxvZyAtIGNhdGFsb2cxLnhtbAotCQkvL2Fzc2VydEVxdWFscygiY2F0MSIsIGNhdGFsb2cuZ2V0SWQoKSk7Ci0JCWFzc2VydEVxdWFscygxMywgY2F0YWxvZy5nZXRDYXRhbG9nRWxlbWVudHMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDIsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDIsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3QgdXJpIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDEsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQkKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nRW50cnkgPSAoSU5leHRDYXRhbG9nKW5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQkJCi0JCWFzc2VydEVxdWFscygiY2F0YWxvZy54bWwiLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhY2RhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9UZXN0UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0UGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdFBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdFBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzdC54bWwuY2F0YWxvZy50ZXN0LlRlc3RQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IGdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShwYXRoKTsKLQkJdXJsID0gRmlsZUxvY2F0b3IucmVzb2x2ZSh1cmwpOwotCQlyZXR1cm4gdXJsLmdldEZpbGUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzODRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIi8+Ci0KLSAgPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImJ2dHdvcmtzcGFjZSIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZS1mb2xkZXIiIHZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgICA8ZGVsZXRlPgotICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLioueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgPCEtLSBTdGFydCB3aXRoIGNsZWFuIGRhdGEgd29ya3NwYWNlIC0tPiAgCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLkFsbFRlc3RzIi8+Ci0gICAgPC9hbnQ+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiZGMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJmNTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZW1vZGVseG1sdGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuc3NlbW9kZWx4bWx0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZmYmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdiYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZTU0MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHNzZW1vZGVseG1sdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LnRlc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXAsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXAudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmZvcm1hdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0LnRlc3RmaWxlcy54bWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LnRlc3RmaWxlcy54bWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBjb20uaWJtLmljdQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZjRhNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZW1vZGVseG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgcHJvamVjdHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3ZWVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IFNTRSBNb2RlbCBYTUwgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDgxZDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZS5jb250ZW50VHlwZXMiPgotCQk8IS0tIGFzc29jaWF0ZSAuZnJhZ3ggZmlsZXMgd2l0aCB0aGUgWE1MIGNvbnRlbnQgdHlwZSAtLT4KLQkJPGZpbGUtYXNzb2NpYXRpb24KLQkJCWNvbnRlbnQtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkJCWZpbGUtZXh0ZW5zaW9ucz0iZnJhZ3giIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uCi0JCWlkPSJUZXN0IgotCQlwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFwcGxpY2F0aW9ucyI+Ci0JCTxhcHBsaWNhdGlvbj4KLQkJCTxydW4KLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5DTVZpc2l0b3JUZXN0IiAvPgotCQk8L2FwcGxpY2F0aW9uPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5jYXRhbG9nQ29udHJpYnV0aW9ucyI+Ci0JCTxjYXRhbG9nQ29udHJpYnV0aW9uIGlkPSJkZWZhdWx0Ij4KLQkJCTx1cmkKLSAgICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RTY2hlbWEueHNkIgotICAgICAgICAgICAgICAgIHVyaT0icHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QiIC8+Ci0JCTwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAKLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTURvY3VtZW50Q2FjaGVUZXN0UHJvamVjdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTURvY3VtZW50Q2FjaGVUZXN0UHJvamVjdC56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NzdkY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvQ01WYWxpZGF0b3JUZXN0UHJvamVjdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTVZhbGlkYXRvclRlc3RQcm9qZWN0LnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkZTE0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTVZhbGlkYXRvclRlc3RQcm9qZWN0LnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2F0dHJpYnV0ZXNvcmRlcnRlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9hdHRyaWJ1dGVzb3JkZXJ0ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzI4ZDdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2F0dHJpYnV0ZXNvcmRlcnRlc3RmaWxlcy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NDNmN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdGZpbGVzL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0U2NoZW1hIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNhZDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC9kb2N1bWVudC90ZXN0L05vZGVJbXBsVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgyZGUzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC9kb2N1bWVudC90ZXN0L05vZGVJbXBsVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEJhbGF6cyBCYW5mYWk6IEJ1ZyAxNTQ3MzcgZ2V0VXNlckRhdGEvc2V0VXNlckRhdGEgc3VwcG9ydCBmb3IgTm9kZQotICogICAgIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTQ3MzcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LnRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkF0dHJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50Lk5vZGVJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Vc2VyRGF0YUhhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIE5vZGVJbXBsVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogQ2FzdHMgdG8gaW1wbGVtZW50YXRpb24gY2xhc3NlcyBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgbWV0aG9kcyBiZWluZwotCSAqIHRoZXJlIGlzbid0IHRoZSBpbnRlcmVzdGluZyBwYXJ0LCBqdXN0IHdoZXRoZXIgb3VyIGJlaGF2aW9yIHdpdGggdGhvc2UKLQkgKiBtZXRob2RzIGlzIGNvcnJlY3QuCi0JICovCQotCi0JTm9kZUltcGwgZWxlbWVudDsKLQlBdHRySW1wbCBhdHRyaWJ1dGU7Ci0JTm9kZUltcGwgZGVzdGluYXRpb25Ob2RlOwotCURvY3VtZW50IGRvY3VtZW50OwotCQotCUVsZW1lbnQgZWxlbWVudFRvSW1wb3J0OwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVk9ImtleSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFPSJ2YWx1ZSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWTI9ImtleTIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRTI9InZhbHVlMiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCQotCQotCS8qKgotICAgICAqIFNldHMgdXAgdGhlIHRlc3QgZml4dHVyZS4gCi0gICAgICogKENhbGxlZCBiZWZvcmUgZXZlcnkgdGVzdCBjYXNlIG1ldGhvZC4pIAotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsgCi0gICAgICAgIAotICAgIAlET01Nb2RlbEltcGwgbW9kZWwgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0gICAgCWRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLSAgICAJZWxlbWVudCA9IChOb2RlSW1wbClkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0ZWxlbWVudCIpOwotICAgIAlhdHRyaWJ1dGUgPSAoQXR0ckltcGwpZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJhdHRyaWJ1dGUiKTsKLSAgICB9IAotCQotICAgIC8qCi0gICAgICogVGVzdCBmb3IgbnVsbDsKLSAgICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEwKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuZ2V0VXNlckRhdGEobnVsbCkpOwotCX0KLSAgICAKLQkvKgotCSAqIFRlc3QgZm9yIG9uZSBrZXkvdmFsdWUKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGExKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGF0dHJpYnV0ZS5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0gICAgLyoKLSAgICAgKiBUZXN0IGZvciBtdWx0aXBsZSBub2RlcwotICAgICAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRVc2VyRGF0YTIoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZMiwgVkFMVUUyLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFMixhdHRyaWJ1dGUuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQkKLQkvKgotCSAqIFRlc3QgZm9yIG11bHRpcGxlIGtleXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEzKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWTIsIFZBTFVFMiwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBrZXkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGExKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShudWxsLCBWQUxVRSwgbnVsbCkpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBkYXRhIHdpdGggbm8gcHJldmlvdXMgdmFsdWUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGEyKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBvdmVyd3JpdGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTMoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRTIsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLCBlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCX0KLQkKLQkvKiAKLQkgKiBUZXN0IGZvciBkZWxldGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTQoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlcj1udWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjAoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWRlc3RpbmF0aW9uTm9kZT0oTm9kZUltcGwpYXR0cmlidXRlLmNsb25lTm9kZSh0cnVlKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlciB3aGVuIGNsb25pbmcgYW4gYXR0cmlidXRlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjEoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbmV3IFVzZXJEYXRhSGFuZGxlcigpewotCi0JCQlwdWJsaWMgdm9pZCBoYW5kbGUoc2hvcnQgb3BlcmF0aW9uLCBTdHJpbmcga2V5LCBPYmplY3QgZGF0YSwgTm9kZSBzcmMsIE5vZGUgZHN0KSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKFVzZXJEYXRhSGFuZGxlci5OT0RFX0NMT05FRCwgb3BlcmF0aW9uKTsKLQkJCQlhc3NlcnRFcXVhbHMoVkFMVUUsIGRhdGEpOwotCQkJCWFzc2VydEVxdWFscyhLRVksIGtleSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKHNyYywgYXR0cmlidXRlKTsgCi0JCQkJCi0JCQkJaWYoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdC5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCi0JCQl9Ci0JCX0pOwotCQkvL2V2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGRlc3RpbmF0aW9uTm9kZSByZXR1cm5zLi4uLgotCQlkZXN0aW5hdGlvbk5vZGU9KEF0dHJJbXBsKWF0dHJpYnV0ZS5jbG9uZU5vZGUodHJ1ZSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igbm90aWZ5aW5nIHRoZSBVc2VyRGF0YUhhbmRsZXIgd2hlbiBpbXBvcnRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aWZ5VXNlckRhdGFIYW5kbGVyMigpIHsKLSAgICAJZWxlbWVudFRvSW1wb3J0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRWxlbWVudFRvSW1wb3J0Iik7Ci0gICAgCSgoTm9kZUltcGwpZWxlbWVudFRvSW1wb3J0KS5zZXRVc2VyRGF0YShLRVksIFZBTFVFLCBuZXcgVXNlckRhdGFIYW5kbGVyKCl7Ci0KLQkJCXB1YmxpYyB2b2lkIGhhbmRsZShzaG9ydCBvcGVyYXRpb24sIFN0cmluZyBrZXksIE9iamVjdCBkYXRhLCBOb2RlIHNyYywgTm9kZSBkc3QpIHsKLQotCQkJCS8vc2VlIGlmIE5PREUuSU1QT1JURUQgbm90aWZpY2F0aW9uIG9jY3VycyB3aXRoIHRoZSByaWdodAotCQkJCS8vcGFyYW1ldGVycwotCQkJCWlmIChvcGVyYXRpb249PVVzZXJEYXRhSGFuZGxlci5OT0RFX0lNUE9SVEVEKSB7CQotCQkJCWFzc2VydEVxdWFscyhWQUxVRSwgZGF0YSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKEtFWSwga2V5KTsKLQkJCQlhc3NlcnRFcXVhbHMoc3JjLCBlbGVtZW50VG9JbXBvcnQpOwotCQkJCWFzc2VydEVxdWFscyhkc3QsIG51bGwpOyAgCi0JCQkJaWYoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50VG9JbXBvcnQsIHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNjA2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCi0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMwNzQ5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQudGVzdC5Ob2RlSW1wbFRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jYWNoZS5HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jbGVhbnVwLlRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwuQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLlRlc3RBdHRyaWJ1dGVzT3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5HZXREb2N1bWVudFJlZ2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0U3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0WE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlRyYW5zaXRpb25UZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLkF0dHJJbXBsVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5FbGVtZW50SW1wbFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTmFtZVZhbGlkYXRvclRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTm9kZUNvbnRhaW5lclRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTm9kZUxpc3RJbXBsVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5yYW5nZS5UZXN0UmFuZ2VDb21wYXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LlRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBDb3JlIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbHNGcm9tRmlsZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RYTUxNb2RlbExvYWRlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTERvY3VtZW50TG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZE1vZGVsLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOYW1lVmFsaWRhdG9yVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRJbXBsVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJJbXBsVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE5vZGVMaXN0SW1wbFRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlQ29udGFpbmVyVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRyYW5zaXRpb25UZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFJhbmdlQ29tcGFyZS5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHZXREb2N1bWVudFJlZ2lvbnNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlSW1wbFRlc3RDYXNlLmNsYXNzKSk7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0QXR0cmlidXRlc09yZGVyLmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5jbGFzcykpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0LmNsYXNzKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmYxZGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjMyMDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1hNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRW5jb2RlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCQlub2RlLnB1dChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiIik7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsVmFsdWUpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlTdHJpbmcgZ2F0ZXdheURlbGltaXRlciA9IHByZWZzLmdldChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMgYW5kIENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5IHByZWZlcmVuY2VzIGRvIG5vdCBtYXRjaCIsIGdhdGV3YXlEZWxpbWl0ZXIsIHByZWZlcnJlZERlbGltaXRlcik7Ci0KLQkJLy8gc2V0IGEgcGFydGljdWxhciBsaW5lIGRlbGltaXRlcgotCQlwcmVmcy5wdXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuTEYpOwotCi0JCS8vIGNyZWF0ZSBkb2N1bWVudAotCQlYTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2FjaGUvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2FjaGUvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzkzN2JlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NhY2hlL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY2FjaGU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuQ01Eb2N1bWVudE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5DTURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIEdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpJUF9GSUxFX05BTUUgPSAiQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QiOyAvLyROT04tTkxTLTEkCi0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIFpJUF9GSUxFX05BTUUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQl9Ci0KLQkvKgotCSAqIFRlc3QgZGVzY3JpcHRpb246Ci0JICogIC0gRW5hYmxlIGdsb2JhbCBjYWNoZS4KLQkgKiAgLSBTY2hlbWEgR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QgaXMgY29udHJpYnV0ZWQgdG8gdGhlIHN5c3RlbSBjYXRhbG9nLgotCSAqICAtIExvYWQgZG9jdW1lbnRzICJHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0MS54bWwiIGFuZCAiR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDEueG1sIi4KLQkgKiAgLSBWZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCBDTURvY3VtZW50cyBhcmUgdGhlIHNhbWUgKGNhY2hlZCkuCi0JICogIC0gTG9hZCBkb2N1bWVudHMgImRvY3VtZW50MS54bWwiIGFuZCAiZG9jdW1lbnQyLnhtbCIgKGxvY2FsIHNjaGVtYSwgbm90IGluIGNhdGFsb2cpLiAgCi0JICogIC0gVmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgQ01Eb2N1bWVudHMgYXJlIGRpZmZlcmVudCAobm90IGNhY2hlZCwgYXMgdGhlIHNjaGVtYSBpcyBub3QgaW4gc3lzdGVtIGNhdGFsb2cpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHbG9iYWxDTURvY3VtZW50Q2FjaGVFbmFibGVkKCkgewotCQkKLQkJLy8gRW5zdXJlIHRoZSBnbG9iYWwgY2FjaGUgaXMgZGlzYWJsZWQuCi0JCXNldEdsb2JhbENhY2hlRW5hYmxlZCh0cnVlKTsKLQkJCi0JCS8vIExvYWQgIndlYjEueG1sIiBhbmQgIndlYjIueG1sIgotCQlDTURvY3VtZW50IGdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RfMSA9IGdldENNRG9jdW1lbnRGcm9tWE1MRmlsZShQUk9KRUNUX05BTUUgKyAiL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8yID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnRFcXVhbHMoZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xLCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIpOwotCQkKLQkJLy8gTG9hZCAiZG9jdW1lbnQxLnhtbCIgYW5kICJkb2N1bWVudDIueG1sIgotCQlDTURvY3VtZW50IGxvY2FsQ01Eb2N1bWVudF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvZG9jdW1lbnQxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgbG9jYWxDTURvY3VtZW50XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9kb2N1bWVudDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnROb3RTYW1lKGxvY2FsQ01Eb2N1bWVudF8xLCBsb2NhbENNRG9jdW1lbnRfMik7Ci0JfQotCi0JLyoKLQkgKiBUZXN0IGRlc2NyaXB0aW9uOgotCSAqICAtIERpc2FibGUgZ2xvYmFsIGNhY2hlLgotCSAqICAtIFNjaGVtYSBHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0U2NoZW1hLnhzZCBpcyBjb250cmlidXRlZCB0byB0aGUgc3lzdGVtIGNhdGFsb2cuCi0JICogIC0gTG9hZCBkb2N1bWVudHMgIkdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QxLnhtbCIgYW5kICJHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0MS54bWwiLgotCSAqICAtIFZlcmlmeSB0aGF0IHRoZSBhc3NvY2lhdGVkIENNRG9jdW1lbnRzIGFyZSBkaWZmZXJlbnQgKG5vdCBjYWNoZWQpLgotCSAqICAtIExvYWQgZG9jdW1lbnRzICJkb2N1bWVudDEueG1sIiBhbmQgImRvY3VtZW50Mi54bWwiLiAgKGxvY2FsIHNjaGVtYSwgbm90IGluIGNhdGFsb2cpLiAgCi0JICogIC0gVmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgQ01Eb2N1bWVudHMgYXJlIGRpZmZlcmVudCAobm90IGNhY2hlZCwgYXMgdGhlIHNjaGVtYSBpcyBub3QgaW4gc3lzdGVtIGNhdGFsb2cpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHbG9iYWxDTURvY3VtZW50Q2FjaGVEaXNhYmxlZCgpIHsKLQkJCi0JCS8vIEVuc3VyZSB0aGUgZ2xvYmFsIGNhY2hlIGlzIGRpc2FibGVkLgotCQlzZXRHbG9iYWxDYWNoZUVuYWJsZWQoZmFsc2UpOwotCQkKLQkJLy8gTG9hZCAid2ViMS54bWwiIGFuZCAid2ViMi54bWwiCi0JCUNNRG9jdW1lbnQgZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDEueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJQ01Eb2N1bWVudCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0Mi54bWwiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJLy8gRW5zdXJlIENNRG9jdW1lbnRzIGFyZSBkaWZmZXJlbnQuCi0JCWFzc2VydE5vdFNhbWUoZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xLCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIpOwotCQkKLQkJLy8gTG9hZCAiZG9jdW1lbnQxLnhtbCIgYW5kICJkb2N1bWVudDIueG1sIgotCQlDTURvY3VtZW50IGxvY2FsQ01Eb2N1bWVudF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvZG9jdW1lbnQxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgbG9jYWxDTURvY3VtZW50XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9kb2N1bWVudDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnROb3RTYW1lKGxvY2FsQ01Eb2N1bWVudF8xLCBsb2NhbENNRG9jdW1lbnRfMik7Ci0JCQotCX0KLQotCXByaXZhdGUgQ01Eb2N1bWVudCBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoU3RyaW5nIGRvY3VtZW50UGF0aCkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGRvY3VtZW50UGF0aCkpOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgCXN0cnVjdHVyZWRNb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGRvY3VtZW50KTsKLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGNtRG9jdW1lbnRNYW5hZ2VyID0gbW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJQ01Eb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgQ01Eb2N1bWVudExvYWRlcihkb2N1bWVudCwgY21Eb2N1bWVudE1hbmFnZXIpOwotCQkJbG9hZGVyLmxvYWRDTURvY3VtZW50cygpOwotCQkJY21Eb2N1bWVudCA9IG1vZGVsUXVlcnkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7ZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpO30KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAoc3RydWN0dXJlZE1vZGVsICE9IG51bGwpIHsKLQkJCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgcmV0dXJuIGNtRG9jdW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRHbG9iYWxDYWNoZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlQcmVmZXJlbmNlcyBwbHVnaW5QcmVmZXJlbmNlcyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXBsdWdpblByZWZlcmVuY2VzLnNldERlZmF1bHQoWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5DTURPQ1VNRU5UX0dMT0JBTF9DQUNIRV9FTkFCTEVELCB2YWx1ZSk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC9UZXN0Q2xlYW51cFByb2Nlc3NvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC9UZXN0Q2xlYW51cFByb2Nlc3NvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQ4ZjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvVGVzdENsZWFudXBQcm9jZXNzb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DbGVhbnVwUHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENsZWFudXBQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIENsZWFudXBQcm9jZXNzb3JYTUwgY2xlYW51cDsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQljbGVhbnVwID0gbmV3IENsZWFudXBQcm9jZXNzb3JYTUwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBOb0hlYWRlcigpIHsKLQkJU3RyaW5nIHBhdGggPSAidGVzdGZpbGVzL25vaGVhZGVyLnhtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRNb2RlbEZvckVkaXQocGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJDb3VsZCBub3QgbG9hZCBtb2RlbCBmb3IgWyIgKyBwYXRoICsgIl0iLCBtb2RlbCk7Ci0KLQkJCWNsZWFudXAuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCkuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJCWNsZWFudXAuY2xlYW51cE1vZGVsKG1vZGVsKTsKLQotCQkJSW5kZXhlZFJlZ2lvbiByZWdpb24gPSBtb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApOwotCQkJYXNzZXJ0VHJ1ZSgiRmlyc3QgcmVnaW9uIGlzIG5vdCBhIG5vZGUiLCByZWdpb24gaW5zdGFuY2VvZiBOb2RlKTsKLQotCQkJTm9kZSBub2RlID0gKE5vZGUpIHJlZ2lvbjsKLQkJCWFzc2VydFRydWUoIkZpcnN0IHJlZ2lvbiBpcyBub3QgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIiwgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKLQotCQkJUHJvY2Vzc2luZ0luc3RydWN0aW9uIHBpID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZTsKLQkJCWFzc2VydEVxdWFscygiTm9kZSBpcyBub3QgYW4gWE1MIGRlY2xhcmF0aW9uIiwgInhtbCIsIHBpLmdldFRhcmdldCgpKTsKLQkJCVN0cmluZyBlbmNvZGluZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJCWFzc2VydEVxdWFscygidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGVuY29kaW5nICsgIlwiIiwgcGkuZ2V0RGF0YSgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBGaXhEZWNsYXJhdGlvbigpIHsKLQkJU3RyaW5nIHBhdGggPSAidGVzdGZpbGVzL2ZpeGRlY2wueG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldE1vZGVsRm9yRWRpdChwYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBsb2FkIG1vZGVsIGZvciBbIiArIHBhdGggKyAiXSIsIG1vZGVsKTsKLQotCQkJY2xlYW51cC5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKS5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQkJY2xlYW51cC5jbGVhbnVwTW9kZWwobW9kZWwpOwotCi0JCQlJbmRleGVkUmVnaW9uIHJlZ2lvbiA9IG1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0JCQlhc3NlcnRUcnVlKCJGaXJzdCByZWdpb24gaXMgbm90IGEgbm9kZSIsIHJlZ2lvbiBpbnN0YW5jZW9mIE5vZGUpOwotCi0JCQlOb2RlIG5vZGUgPSAoTm9kZSkgcmVnaW9uOwotCQkJYXNzZXJ0VHJ1ZSgiRmlyc3QgcmVnaW9uIGlzIG5vdCBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iLCBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOwotCi0JCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBub2RlOwotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIGlzIG5vdCBhbiBYTUwgZGVjbGFyYXRpb24iLCAieG1sIiwgcGkuZ2V0VGFyZ2V0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKCJ2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJJU08tODg1OS0xXCIiLCBwaS5nZXREYXRhKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jbGVhbnVwL3Rlc3RmaWxlcy9maXhkZWNsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL2ZpeGRlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNmYjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL2ZpeGRlY2wueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLQotCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci0KLTxyb290PgotCTxub2RlIGlkPSJjb250ZW50Ij48L25vZGU+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC90ZXN0ZmlsZXMvbm9oZWFkZXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC90ZXN0ZmlsZXMvbm9oZWFkZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjI4ODE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL25vaGVhZGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHJvb3Q+Ci0JPGRhdGEgaWQ9IjEiPjwvZGF0YT4KLQk8ZGF0YSBpZD0iMiI+PC9kYXRhPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiZmY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01QcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUFueUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRW50aXR5RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNUHJpbnRlciBleHRlbmRzIENNVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBWZWN0b3IgdmlzaXRlZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgLyoqKioqKiAgIGZvcm1hdHRpbmcgICAgKioqKioqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGluZGVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIHZvaWQgaW5jcmVtZW50SW5kZW50KCkKLSAgewotICAgIGluZGVudCA9IGluZGVudCArICIgICI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnQgPSBpbmRlbnQuc3Vic3RyaW5nKDAsIGluZGVudC5sZW5ndGgoKS0yKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRDTU5vZGUoU3RyaW5nIGZpbGVuYW1lLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgdmlzaXRDTU5vZGUoY21ub2RlKTsKLSAgICB0cnkgCi0gICAgewotICAgICAgRmlsZU91dHB1dFN0cmVhbSBmaWxlU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpOwotICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZVN0cmVhbSk7Ci0gICAgICB3cml0ZXIud3JpdGUoZlN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIHdyaXRlci5mbHVzaCgpOwotICAgICAgZmlsZVN0cmVhbS5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKCJQTVByaW50ZXIgRGVidWc6ICIsIGUpOwotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUFueUVsZW1lbnQoQ01BbnlFbGVtZW50IGFueUVsZW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQW55RWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGFueUVsZW1lbnQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+L24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBhbnlFbGVtZW50KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUFueUVsZW1lbnQ+L24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYWQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQXR0cmlidXRlRGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBhZCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGFkKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICB2aXNpdENNTm9kZShhZC5nZXRBdHRyVHlwZSgpKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUF0dHJpYnV0ZURlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01EYXRhVHlwZShDTURhdGFUeXBlIGRhdGFUeXBlKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTURhdGFUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZGF0YVR5cGUpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8SW1wbGllZFZhbHVlIGtpbmQ9XCIiICsgZGF0YVR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpICsgIlwiPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChkYXRhVHlwZS5nZXRJbXBsaWVkVmFsdWUoKSArICI8L0ltcGxpZWRWYWx1ZT5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRFbnVtZXJhdGlvbihmU3RyaW5nQnVmZmVyLCBkYXRhVHlwZS5nZXRFbnVtZXJhdGVkVmFsdWVzKCkpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRGF0YVR5cGU+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTURvY3VtZW50KENNRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBkb2N1bWVudCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAvLyAgICBwcmludEVudGl0aWVzKHNiLCBkb2N1bWVudC5nZXRFbnRpdGllcygpKTsgCi0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGRvY3VtZW50KTsKLQotICAgIENNTmFtZWROb2RlTWFwIG1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgaW50IHNpemUgPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobWFwLml0ZW0oaSkpOwotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRG9jdW1lbnQ+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNR3JvdXAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBncm91cCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBDTU5vZGVMaXN0IG5vZGVMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBzaXplID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobm9kZUxpc3QuaXRlbShpKSk7Ci0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01Hcm91cD5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGVkKQotICB7Ci0gICAgaWYgKCF2aXNpdGVkRWxlbWVudHMuY29udGFpbnMoZWQpKQotICAgIHsKLSAgICAgIHZpc2l0ZWRFbGVtZW50cy5hZGQoZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBlZCk7Ci0KLSAgICAgIENNTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlZC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpbnQgc2l6ZSA9IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdmlzaXRDTU5vZGUobm9kZU1hcC5pdGVtKGkpKTsKLSAgICAgIH0KLQotICAgICAgdmlzaXRDTU5vZGUoZWQuZ2V0Q29udGVudCgpKTsKLQotICAgICAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGVkLmdldERhdGFUeXBlKCk7Ci0gICAgICBpZiAoZGF0YVR5cGUgIT0gbnVsbCkKLSAgICAgICAgdmlzaXRDTU5vZGUoZGF0YVR5cGUpOwotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRWxlbWVudERlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW51bWVyYXRpb24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmdbXSB2YWx1ZXMpCi0gIHsKLSAgICBpZiAoKHZhbHVlcyAhPSBudWxsKSAmJiAodmFsdWVzLmxlbmd0aCA+IDApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudW1lcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8dmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxWYWx1ZT4iICsgdmFsdWVzW2ldICsgIjwvVmFsdWVzPlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9FbnVtZXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEF0dHJpYnV0ZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgaWYgKGNtbm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCgiIG5vZGVOYW1lPVwiIiArIGNtbm9kZS5nZXROb2RlTmFtZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgc2IuYXBwZW5kKCIgbm9kZVR5cGU9XCIiICsgY21ub2RlLmdldE5vZGVUeXBlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG1pbk9jY3VyPVwiIiArICgoQ01Db250ZW50KWNtbm9kZSkuZ2V0TWluT2NjdXIoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgc2IuYXBwZW5kKCIgbWF4T2NjdXI9XCIiICsgKChDTUNvbnRlbnQpY21ub2RlKS5nZXRNYXhPY2N1cigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQW55RWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgbmFtZXNwYWNlVVJJPVwiIiArICgoQ01BbnlFbGVtZW50KWNtbm9kZSkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgdWFzYWdlPVwiIiArICgoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiljbW5vZGUpLmdldFVzYWdlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIHNiLmFwcGVuZCgiIGRlZmF1bHRWYWx1ZT1cIiIgKyAoKENNQXR0cmlidXRlRGVjbGFyYXRpb24pY21ub2RlKS5nZXREZWZhdWx0VmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTURhdGFUeXBlKQotICAgICAgeyAKLSAgICAgICAgc2IuYXBwZW5kKCIgaW5zdGFuY2VWYWx1ZT1cIiIgKyAoKENNRGF0YVR5cGUpY21ub2RlKS5nZW5lcmF0ZUluc3RhbmNlVmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVudGl0eURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoKENNRW50aXR5RGVjbGFyYXRpb24pY21ub2RlKS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiXCIiKSA9PSAtMSkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgZWxzZSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUdyb3VwKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBvcGVyYXRvcj1cIiIgKyAoKENNR3JvdXApY21ub2RlKS5nZXRPcGVyYXRvcigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBjb250ZW50VHlwZT1cIiIgKyAoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0Q29udGVudFR5cGUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW50aXRpZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5hbWVkTm9kZU1hcCBlbnRpdGllcykKLSAgewotICAgIGlmICgoZW50aXRpZXMgIT0gbnVsbCkgJiYgKGVudGl0aWVzLmdldExlbmd0aCgpPjApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlbnRpdGllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIENNRW50aXR5RGVjbGFyYXRpb24gZW50aXR5ID0gKENNRW50aXR5RGVjbGFyYXRpb24paS5uZXh0KCk7Ci0gICAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0eSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByaW50QXR0cmlidXRlcyhzYiwgZW50aXR5KTsKLSAgICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvRW50aXRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50UHJvcGVydGllcyhTdHJpbmdCdWZmZXIgc2IsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzKGNtbm9kZSk7Ci0gICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8cHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvcGVydHkgPSAoU3RyaW5nKXByb3BlcnRpZXMuZ2V0KGkpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydHkgbmFtZT1cIiIgKyBwcm9wZXJ0eSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICAgaWYgKGNtbm9kZS5zdXBwb3J0cyhwcm9wZXJ0eSkpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHN1cHBvcnRzPVwidHJ1ZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgc3VwcG9ydHM9XCJmYWxzZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIE9iamVjdCB2YWx1ZSA9IGNtbm9kZS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIChTdHJpbmcpdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUuZ2V0Q2xhc3MoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2Ugc2IuYXBwZW5kKCIgdmFsdWU9XCJudWxsXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvUHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQcm9wZXJ0aWVzKENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICBpZiAoY21ub2RlICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydGllcy5hZGQoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImRvY3VtZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy91c2VzTG9jYWxFbGVtZW50RGVjbGFyYXRpb25zIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvaXNOYW1lU3BhY2VBd2FyZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25zUHJlZml4UXVhbGlmaWNhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25pbGxhYmxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbW9mTm90aWZpZXIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoInNwZWMiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZGVmaW5pdGlvbkluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2RlZmluaXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiWFNJVHlwZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiRGVyaXZlZEVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vIHByb3BlcnRpZXMuYWRkKCJTdWJzdGl0dXRpb25Hcm91cCIpOyBDdXJycmVudGx5IGJyb2tlbiBmb3IgbmV4dGVkIHhzZCBmaWxlcwotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiQWJzdHJhY3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRG9jdW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9pbXBvcnRlZE5hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2VsZW1lbnRGb3JtRGVmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJhbm5vdGF0aW9uTWFwIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi19Ci0KLSAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlNjY5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01WaXNpdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBDTVV0aWxpdHkKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgLyoqCi0gICAqIHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBvciBhbnkgb2YgaXRzIGFuY2VzdG9yIGdyb3VwIG5vZGVzIGFyZSByZXBlYXRhYmxlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2RlT3JBbmNlc3Rvckdyb3VwUmVwZWF0YWJsZShDTUNvbnRlbnQgY29udGVudCwgQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIC8vIHNpbmNlIHdlIGNhbid0IHdhbGsgdXAgdGhlIENNTm9kZSB0cmVlICh3aHkgeW91IGFzaz8gLi4uIGl0cyBhIGxvbmcgc3RvcnkpCi0gICAgLy8gd2Ugd2FsayBkb3duIHRoZSB0cmVlIHRvIGNvbnNpZGVyIHRoZSBjaGlsZCdzIHBhcmVudCBub2RlJ3MKLSAgICAvLwotICAgIGJvb2xlYW4gcmVzdWx0ID0gaXNSZXBlYXRhYmxlKGNoaWxkKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICB7Ci0gICAgICBDYW5SZXBlYXRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgQ2FuUmVwZWF0VmlzaXRvcihjb250ZW50LCBjaGlsZCk7Ci0gICAgICB2aXNpdG9yLnZpc2l0Q01Ob2RlKGNvbnRlbnQpOwotICAgICAgcmVzdWx0ID0gdmlzaXRvci5nZXRSZXN1bHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgaXMgcmVwZWF0YWJsZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9kZVJlcGVhdGFibGUoQ01Db250ZW50IGNvbnRlbnQsIENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBzaW5jZSB3ZSBjYW4ndCB3YWxrIHVwIHRoZSBDTU5vZGUgdHJlZSAod2h5IHlvdSBhc2s/IC4uLiBpdHMgYSBsb25nIHN0b3J5KQotICAgIC8vIHdlIHdhbGsgZG93biB0aGUgdHJlZSB0byBjb25zaWRlciB0aGUgY2hpbGQncyBwYXJlbnQgbm9kZSdzCi0gICAgLy8KLSAgICBib29sZWFuIHJlc3VsdCA9IGlzUmVwZWF0YWJsZShjaGlsZCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgewotICAgICAgSXNSZXBlYXRhYmxlVmlzaXRvciB2aXNpdG9yID0gbmV3IElzUmVwZWF0YWJsZVZpc2l0b3IoY29udGVudCwgY2hpbGQpOwotICAgICAgdmlzaXRvci52aXNpdENNTm9kZShjb250ZW50KTsKLSAgICAgIHJlc3VsdCA9IHZpc2l0b3IuZ2V0UmVzdWx0KCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZXBlYXRhYmxlKENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgewotICAgICAgQ01Db250ZW50IGNvbnRlbnQgPSAoQ01Db250ZW50KWNoaWxkOwotICAgICAgcmVzdWx0ID0gY29udGVudC5nZXRNYXhPY2N1cigpID4gMSB8fCBjb250ZW50LmdldE1heE9jY3VyKCkgPT0gLTE7Ci0gICAgfSAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDYW5SZXBlYXRWaXNpdG9yIGV4dGVuZHMgQ01WaXNpdG9yCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN1bHQ7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0KLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHJvb3Q7Ci0gICAgcHJvdGVjdGVkIENNTm9kZSB0YXJnZXQ7Ci0KLSAgICBwdWJsaWMgQ2FuUmVwZWF0VmlzaXRvcihDTU5vZGUgcm9vdCwgQ01Ob2RlIHRhcmdldCkKLSAgICB7Ci0gICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gICAgeyAgICAgICAgIAotICAgICAgYm9vbGVhbiBvbGRJc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBpc1JlcGVhdGFibGUoZ3JvdXApOwotICAgICAgCi0gICAgICBzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotCi0gICAgICBpc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IG9sZElzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gY21lbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChjbWVsZW1lbnQgPT0gdGFyZ2V0KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSAgCi0gIH0KLQotCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgSXNSZXBlYXRhYmxlVmlzaXRvciBleHRlbmRzIENNVmlzaXRvcgotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcHVibGljIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgcHJvdGVjdGVkIENNR3JvdXAgY3VycmVudEdyb3VwOwotCi0gICAgcHJvdGVjdGVkIENNTm9kZSByb290OwotICAgIHByb3RlY3RlZCBDTU5vZGUgdGFyZ2V0OwotCi0gICAgcHVibGljIElzUmVwZWF0YWJsZVZpc2l0b3IoQ01Ob2RlIHJvb3QsIENNTm9kZSB0YXJnZXQpCi0gICAgewotICAgICAgdGhpcy5yb290ID0gcm9vdDsKLSAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKQotICAgIHsgICAgICAgICAKLSAgICAgIENNR3JvdXAgcHJldmlvdXNHcm91cCA9IGN1cnJlbnRHcm91cDsKLSAgICAgIGN1cnJlbnRHcm91cCA9IGdyb3VwOwotICAgICAgc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLSAgICAgIGN1cnJlbnRHcm91cCA9IHByZXZpb3VzR3JvdXA7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBjbWVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGNtZWxlbWVudCA9PSB0YXJnZXQpCi0gICAgICB7Ci0gICAgICAgIGlmIChjdXJyZW50R3JvdXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9ICgoY3VycmVudEdyb3VwLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5DSE9JQ0UpICYmCi0gICAgICAgICAgICAgICAgICAgIChpc1JlcGVhdGFibGUoY3VycmVudEdyb3VwKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmNjMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5FbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3IuU3RyaW5nRWxlbWVudENvbnRlbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JUZXN0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdbXSkKLSAgewotICAgIGlmIChhcmcubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy9DTURvY3VtZW50RmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkucmVnaXN0ZXJDTURvY3VtZW50QnVpbGRlcldpdGhDbGFzc05hbWUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9maW1wbC5DTURvY3VtZW50QnVpbGRlckltcGwiKTsKLQotICAgICAgICBTdHJpbmcgZ3JhbW1hckZpbGVOYW1lID0gYXJnWzBdOwotICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBhcmdbMV07Ci0KLSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZUNNRG9jdW1lbnQoZ3JhbW1hckZpbGVOYW1lLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRNYXAgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudE1hcC5nZXROYW1lZEl0ZW0oZWxlbWVudE5hbWUpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7IC8qCi0gICAgICAgICAgcHJpbnRsbigiZm91bmQgZWxlbWVudCBbIiArIGVsZW1lbnROYW1lICsgIl0gIGNvbnRlbnRUeXBlID0gIiArIGVsZW1lbnQuZ2V0Q29udGVudFR5cGUoKSk7Ci0gICAgICAgICAgR3JhcGhOb2RlIGdyYXBoTm9kZSA9IGNyZWF0ZUdyYXBoKGVsZW1lbnQpOwotICAgICAgICAgIHByaW50R3JhcGgoZ3JhcGhOb2RlKTsKLSAgICAgICAgICAqLwotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGJlZ2luIHZhbGlkYXRlIC0tLS0tLS0tLS0tLS0tLSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgICBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IoKTsKLSAgICAgICAgICBDTVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgQ01WYWxpZGF0b3IoKTsKLSAgICAgICAgICBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCByZXN1bHQgPSBuZXcgRWxlbWVudFBhdGhSZWNvcmRpbmdSZXN1bHQoKTsKLSAgICAgICAgICB2YWxpZGF0b3IuZ2V0T3JpZ2luQXJyYXkoZWxlbWVudCwgQ01WYWxpZGF0b3IuY3JlYXRlU3RyaW5nTGlzdChhcmcsIDIpLCBjb21wYXJhdG9yLCByZXN1bHQpOwotICAgICAgICAgIGlmIChyZXN1bHQuaXNWYWxpZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDTU5vZGVbXSBub2RlTWFwcGluZyA9IHJlc3VsdC5nZXRPcmlnaW5BcnJheSgpOwotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBTdWNjZXNzISIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBwcmludCgiICAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwcGluZy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBub2RlTWFwcGluZ1tpXSAhPSBudWxsID8gbm9kZU1hcHBpbmdbaV0uZ2V0Tm9kZU5hbWUoKSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBwcmludCgiWyIgKyBuYW1lICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGxuKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBGYWlsZWQhICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmludGxuKCIgICIgKyByZXN1bHQuZXJyb3JNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBwcmludGxuKCItLS0tLS0tLS0tLS0tLSBlbmQgdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwcmludGxuKCJlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSBjYW4gbm90IGJlIGZvdW5kIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIkNNVmFsaWRhdG9yIGVycm9yIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjIgYXJncyByZXF1aXJlZC4uLiBvbmx5ICIgKyBhcmcubGVuZ3RoICsgIiBwcm92aWRlZCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIHByaW50bG4oInVzYWdlIGphdmEgb3JnLmVjbGlwc2Uud3N0Lm5ld3htbC51dGlsLlhNTFV0aWwgZ3JhbW1hckZpbGVOYW1lIHJvb3RFbGVtZW50TmFtZSBwYXR0ZXJuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAgIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKQotICB7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVmFsaWRhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3YzAzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSJDTVZhbGlkYXRvclRlc3RQcm9qZWN0IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBaSVBfRklMRV9OQU1FID0gIkNNVmFsaWRhdG9yVGVzdFByb2plY3QuemlwIjsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgWklQX0ZJTEVfTkFNRSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChQUk9KRUNUX05BTUUpOwotCX0KLQotCS8qCi0JICogVGhpcyB0ZXN0IG1ha2VzIHVzZSBvZiB0aGUgZm9sbG93aW5nIFhNTCBzY2hlbWEgc3RydWN0dXJlOgotCSAqIAotCSAqIHJvb3QgKGVsZW1lbnQpCi0JICogICB8Ci0JICogICArLSBzZXF1ZW5jZQotCSAqICAgICAgICAgfAotCSAqICAgICAgICAgKy0gYSAoZWxlbWVudCkKLQkgKiAgICAgICAgIHwgIHwKLQkgKiAgICAgICAgIHwgICstIHNlcXVlbmNlICgwIHRvIG4pCi0JICogICAgICAgICB8ICAgICAgICB8Ci0JICogICAgICAgICB8ICAgICAgICArLSBhMSAoZWxlbWVudCkKLQkgKiAgICAgICAgIHwKLQkgKiAgICAgICAgICstIGIgKGVsZW1lbnQpCi0JICogICAgICAgICB8ICB8Ci0JICogICAgICAgICB8ICArLSBzZXF1ZW5jZQotCSAqICAgICAgICAgfCAgICAgICAgfAotCSAqICAgICAgICAgfCAgICAgICAgKy0gYjEgKGVsZW1lbnQgd2l0aCBvY2N1cnJlbmNlcyAwIHRvIDIpCi0JICogICAgICAgICB8Ci0JICogICAgICAgICArLSBjaG9pY2UKLQkgKiAgICAgICAgICAgICAgIHwKLQkgKiAgICAgICAgICAgICAgICstIGMgKGVsZW1lbnQpCi0JICogICAgICAgICAgICAgICB8Ci0JICogICAgICAgICAgICAgICArLSBkIChlbGVtZW50KQotCSAqCi0JICogVGVzdCBkb2N1bWVudCBjb250YWlucyBvbmx5IHRoZSByb290IGVsZW1lbnQuCi0JICogQXQgdGhlIHJvb3QgZWxlbWVudCBsZXZlbCwgZWxlbWVudCBhIGlzIGluaXRpYWxseSBhdmFpbGFibGUuCi0JICogQWRkaW5nIGEgbWFrZXMgYiBhdmFpbGFibGUuIEFkZGluZyBiIG1ha2VzIGMgb3IgZCBhdmFpbGFibGUuCi0JICogQWRkaW5nIGVpdGhlciBjIG9yIGQgbWFrZXMgbm8gbm9kZXMgYXZhaWxhYmxlIGF0IHRoZSByb290LgotCSAqIEFueSBhcmJpdHJhcnkgbnVtYmVyIG9mIGVsZW1lbnRzIGExIGNhbiBiZSBhZGRlZCB0byBlbGVtZW50IGEuCi0JICogT25seSAyIGVsZW1lbnRzIGIyIG1heSBiZSBhZGRlZCB0byBlbGVtZW50IGIuIAotCSAqLwotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbnNlcnRBY3Rpb25zKCkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKFBST0pFQ1RfTkFNRSArICIvQ01WYWxpZGF0b3JUZXN0U2NoZW1hLnhtbCIpKTsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCSAgICB0cnkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCQkKLQkJCS8vIHJvb3QgZWxlbWVudCBoYXMgbm8gY2hpbGRyZW4sIGVsZW1lbnQgYSBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImEifSk7Ci0KLQkJCS8vIGFkZCBlbGVtZW50IGEKLQkJCUVsZW1lbnQgYUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYUVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYTsgYiBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImIifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGIKLQkJCUVsZW1lbnQgYkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYkVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYSBhbmQgYjsgYyBhbmQgZCBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImQiLCAiYyJ9KTsKLQkJCQotCQkJLy8gYWRkIGVsZW1lbnQgYwotCQkJRWxlbWVudCBjRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKTsKLQkJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChjRWxlbWVudCk7Ci0JCQkKLQkJCS8vIHJvb3QgZWxlbWVudCBjb250YWlucyBhLCBiIGFuZCBjOyBubyBtb3JlIGVsZW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUKLQkJCXZlcmlmeShkb2N1bWVudEVsZW1lbnQsIG5ldyBTdHJpbmdbXXt9KTsKLQkJCQotCQkJLy8gcmVtb3ZlIGMgZWxlbWVudAotCQkJZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKGNFbGVtZW50KTsKLQkJCQotCQkJLy8gcm9vdCBlbGVtZW50IGNvbnRhaW5zIGEgYW5kIGI7IGMgYW5kIGQgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGRvY3VtZW50RWxlbWVudCwgbmV3IFN0cmluZ1tdeyJkIiwgImMifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGQKLQkJCUVsZW1lbnQgZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZEVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYSwgYiBhbmQgZDsgbm8gbW9yZSBlbGVtZW50cyBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117fSk7Ci0JCQkKLQkJCS8vIGVsZW1lbnQgYSBjb250YWlucyBubyBjaGlsZHJlbjsgZWxlbWVudCBhMSBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoYUVsZW1lbnQsIG5ldyBTdHJpbmdbXXsiYTEifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGExIHRvIGEKLQkJCWFFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImExIikpOwotCQkJCi0JCQkvLyBlbGVtZW50IGExIGlzIGluIGFuIHVuYm91bmRlZCBzZXF1ZW5jZSwgaXQgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGFFbGVtZW50LCBuZXcgU3RyaW5nW117ImExIn0pOwotCQkJCi0JCQkvLyBlbGVtZW50IGIgY29udGFpbnMgbm8gY2hpbGRyZW47IGVsZW1lbnQgYjEgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGJFbGVtZW50LCBuZXcgU3RyaW5nW117ImIxIn0pOwotCQkJCi0JCQkvLyBhZGQgZWxlbWVudCBiMSB0byBiCi0JCQliRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiMSIpKTsKLQkJCQotCQkJLy8gZWxlbWVudCBiIGNvbnRhaW5zIDEgYjEgY2hpbGQ7IGFub3RoZXIgaW5zdGFuY2Ugb2YgYjEgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGJFbGVtZW50LCBuZXcgU3RyaW5nW117ImIxIn0pOwotCi0JCQkvLyBhZGQgYW5vdGhlciBlbGVtZW50IGIxIHRvIGIKLQkJCWJFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIxIikpOwotCQkJCi0JCQkvLyBiMSBjYW4gb25seSBhcHBlYXIgdHdpY2UsIG5vIGVsZW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUKLQkJCXZlcmlmeShiRWxlbWVudCwgbmV3IFN0cmluZ1tde30pOwotCQkJCi0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikge2V4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTt9Ci0JfQotCQotCQotCXByaXZhdGUgdm9pZCB2ZXJpZnkoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmdbXSBjaGlsZEVsZW1lbnRzQXZhaWxhYmxlKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShwYXJlbnRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uID0gbW9kZWxRdWVyeS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihwYXJlbnRFbGVtZW50KTsKLQkJbW9kZWxRdWVyeS5nZXRJbnNlcnRBY3Rpb25zKHBhcmVudEVsZW1lbnQsIGNtRWxlbWVudERlY2xhcmF0aW9uLCAtMSwgTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTLCBNb2RlbFF1ZXJ5LlZBTElESVRZX1NUUklDVCwgbGlzdCk7Ci0JCWFzc2VydEVxdWFscyhjaGlsZEVsZW1lbnRzQXZhaWxhYmxlLmxlbmd0aCwgbGlzdC5zaXplKCkpOwotCQlMaXN0IGF2YWlsYWJsZU5vZGVOYW1lTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJYXZhaWxhYmxlTm9kZU5hbWVMaXN0LmFkZCgoKE1vZGVsUXVlcnlBY3Rpb24paXRlcmF0b3IubmV4dCgpKS5nZXRDTU5vZGUoKS5nZXROb2RlTmFtZSgpKTsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRWxlbWVudHNBdmFpbGFibGUubGVuZ3RoOyBpKyspIHsKLQkJCWlmKGF2YWlsYWJsZU5vZGVOYW1lTGlzdC5pbmRleE9mKGNoaWxkRWxlbWVudHNBdmFpbGFibGVbaV0pID09IC0xKSB7Ci0JCQkJZmFpbCgpOwotCQkJfQotCQl9Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OWI5OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeWltcGwuTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5YTUxBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTURvY3VtZW50Q2FjaGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIENNVmlzaXRvclRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZSB7Ci0JcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGEpIHsKLQkJU3RyaW5nIGFyZ3NbXSA9IChTdHJpbmdbXSkgYTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJdGVzdChhcmdzWzBdKTsKLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigieG1sIGZpbGUgbmFtZSBhcmd1bWVudCByZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVzdChTdHJpbmcgZmlsZU5hbWUpIHsKLQotCQlDbGFzc0xvYWRlciBvcmlnaW5hbENsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJdHJ5IHsKLQkJCVhNTEFzc29jaWF0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgWE1MQXNzb2NpYXRpb25Qcm92aWRlcihuZXcgQ01Eb2N1bWVudENhY2hlKCkpIHsKLQkJCX07Ci0KLQkJCU1vZGVsUXVlcnkgbXEgPSBuZXcgTW9kZWxRdWVyeUltcGwocHJvdmlkZXIpOwotCi0JCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihDTVZpc2l0b3JUZXN0LmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IGJ1aWxkZXIucGFyc2UoZmlsZU5hbWUpOwotCi0JCQkvKgotCQkJICogQ2xhc3NMb2FkZXIgcHJldkNsYXNzTG9hZGVyID0KLQkJCSAqIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotCQkJICogQ2xhc3MgdGhlQ2xhc3MgPQotCQkJICogQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIiKTsgRE9NUGFyc2VyCi0JCQkgKiBwYXJzZXIgPSAoRE9NUGFyc2VyKXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2Q2xhc3NMb2FkZXIpOwotCQkJICogcGFyc2VyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShmaWxlTmFtZSkpOyBEb2N1bWVudCBkb2N1bWVudCA9Ci0JCQkgKiBwYXJzZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCSAqLwotCQkJdmlzaXROb2RlKGRvY3VtZW50LCBtcSwgMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIob3JpZ2luYWxDbGFzc0xvYWRlcik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB2aXNpdE5vZGUoTm9kZSBub2RlLCBNb2RlbFF1ZXJ5IG1xLCBpbnQgaW5kZW50KSB7Ci0JCUNNTm9kZSBjbW5vZGUgPSBtcS5nZXRDTU5vZGUobm9kZSk7Ci0JCXByaW50bG5JbmRlbnRlZChpbmRlbnQsICJub2RlIDoiICsgbm9kZS5nZXROb2RlTmFtZSgpICsgIiBjbW5vZGUgOiAiICsgKGNtbm9kZSAhPSBudWxsID8gY21ub2RlLmdldE5vZGVOYW1lKCkgOiAibnVsbCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJTmFtZWROb2RlTWFwIG1hcCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlpZiAobWFwICE9IG51bGwpIHsKLQkJCWluZGVudCArPSAyOwotCQkJaW50IG1hcExlbmd0aCA9IG1hcC5nZXRMZW5ndGgoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWFwTGVuZ3RoOyBpKyspIHsKLQkJCQl2aXNpdE5vZGUobWFwLml0ZW0oaSksIG1xLCBpbmRlbnQpOwotCQkJfQotCQkJaW5kZW50IC09IDI7Ci0JCX0KLQkJaW5kZW50ICs9IDQ7Ci0JCU5vZGVMaXN0IGxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkJaW50IGxpc3RMZW5ndGggPSBsaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykgewotCQkJdmlzaXROb2RlKGxpc3QuaXRlbShpKSwgbXEsIGluZGVudCk7Ci0JCX0KLQkJaW5kZW50IC09IDQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmcpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0QXR0cmlidXRlc09yZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEF0dHJpYnV0ZXNPcmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTY5OGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0QXR0cmlidXRlc09yZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBBZGRlZCBjb250ZW50IEFzc2lzdCBjaGVjayBpbiB0ZXN0SWdub3Jlc0F0dHJpYnV0ZXNPcmRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKiBUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgYXR0cmlidXRlcyBvcmRlciBpcyBub3QgaW1wb3J0YW50IHdoZW4gdHJ5aW5nIHRvCi0gKiBkZXRlcm1pbmUgdGhlIGNvbnRlbnQgbW9kZWwuCi0gKiAKLSAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk4ODA3Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QXR0cmlidXRlc09yZGVyIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIHRhcmdldCBwcm9qZWN0IG5hbWUuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiQXR0cmlidXRlc09yZGVyIjsgLy8kTk9OLU5MUy1OJAotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgemlwIGZpbGUgY29udGFpbmluZyB0aGUgcHJvamVjdCB0byBpbXBvcnQuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAiYXR0cmlidXRlc29yZGVydGVzdGZpbGVzLnppcCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgVGVzdEF0dHJpYnV0ZXNPcmRlcigpCi0gIHsKLSAgICBzdXBlcigiVGVzdEF0dHJpYnV0ZXNPcmRlciIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXR0cmlidXRlcyBvcmRlciBpcyBub3QgaW1wb3J0YW50IHdoZW4KLSAgICogZGV0ZXJtaW5pbmcgdGhlIGNvbnRlbnQgbW9kZWwgZm9yIGEgZ2l2ZW4gWE1MIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdElnbm9yZXNBdHRyaWJ1dGVzT3JkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIC8vIFRlc3RzIHRoZSBzY2VuYXJpbyB0aGF0IHVzZWQgdG8gc3VjY2VlZCwgd2hlcmUgdGhlIG5hbWVzcGFjZSBwcmVmaXggaXMKLSAgICAvLyBkZWNsYXJlZCBiZWZvcmUgdGhlIHNjaGVtYUxvY2F0aW9uLgotCi0gICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoIlByZXZpb3VzbHlTdWNjZWVkaW5nVGVzdC54bWwiKTsgLy8kTk9OLU5MUy0xJAotICAgIGVuc3VyZURvY3VtZW50SGFzR3JhbW1hcihmaWxlKTsKLQotICAgIC8vIFRlc3RzIHRoZSBmYWlsaW5nIHNjZW5hcmlvLCB3aGVyZSB0aGUgc2NoZW1hTG9jYXRpb24gY29tZXMgZmlyc3QuCi0KLSAgICBmaWxlID0gZ2V0RmlsZSgiUHJldmlvdXNseUZhaWxpbmdUZXN0LnhtbCIpOyAvLyROT04tTkxTLTEkCi0gICAgZW5zdXJlRG9jdW1lbnRIYXNHcmFtbWFyKGZpbGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotCi0gICAgaWYgKCF0aGlzLmlzU2V0dXApCi0gICAgewotICAgICAgZG9TZXR1cCgpOwotICAgICAgdGhpcy5pc1NldHVwID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgcmVxdWlyZWQgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiAKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotICAgIFByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLSAgICBGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLSAgICBVUkwgcGxhdGZvcm1Mb2NhdGlvblVSTCA9IHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCk7Ci0gICAgU3RyaW5nIGZpbGUgPSBwbGF0Zm9ybUxvY2F0aW9uVVJMLmdldEZpbGUoKTsKLSAgICB1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZmlsZSk7Ci0gICAgdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldXNhYmxlIHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBYTUwgbW9kZWwgZm9yIHRoZSBnaXZlbiBmaWxlIGhhcyBhIGdyYW1tYXIuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZQotICAgKiAgICAgICAgICB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlRG9jdW1lbnRIYXNHcmFtbWFyKElGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotICAgICAgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiZmFpbHVyZSBsb2FkaW5nIG1vZGVsIiwgbW9kZWwpOyAvLyROT04tTkxTLTEkCi0gICAgICBJRE9NTW9kZWwgZG9tTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbDsKLSAgICAgIElET01Eb2N1bWVudCBkb2N1bWVudCA9IGRvbU1vZGVsLmdldERvY3VtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJmYWlsdXJlIGdldHRpbmcgZG9jdW1lbnQiLCBkb2N1bWVudCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIE1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoZG9jdW1lbnQpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiTW9kZWxRdWVyeSBpcyBtaXNzaW5nIiwgbW9kZWxRdWVyeSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIElET01FbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IChJRE9NRWxlbWVudCkgZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJtaXNzaW5nIGRvY3VtZW50IGVsZW1lbnQiLCBkb2N1bWVudEVsZW1lbnQpOyAvLyROT04tTkxTLTEkCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBjbUVsZW1lbnREZWNsYXJhdGlvbiA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZG9jdW1lbnRFbGVtZW50KTsKLSAgICAgIGFzc2VydE5vdE51bGwoIk5vIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yIiArIGRvY3VtZW50RWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiAoIitkb2N1bWVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkrIikiLCBjbUVsZW1lbnREZWNsYXJhdGlvbik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICBhc3NlcnROb3ROdWxsKCJObyBjb250ZW50IGFzc2lzdCBhdmFpbGFibGUgZm9yIiArIGRvY3VtZW50RWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiAoIiArIGRvY3VtZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSArICIpIixtb2RlbFF1ZXJ5LmdldEF2YWlsYWJsZUNvbnRlbnQoZG9jdW1lbnRFbGVtZW50LCBjbUVsZW1lbnREZWNsYXJhdGlvbiwgTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTKSk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAobW9kZWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gcmV0cmlldmUgdGhlIElGaWxlIGZvciB0aGUgZ2l2ZW4gZmlsZSBuYW1lLiBUaGUgZmlsZSBpcyBleHBlY3RlZAotICAgKiB0byBiZSBpbiB0aGUgd29ya3NwYWNlIGluIHRoZSBwcm9qZWN0IG5hbWVkIGJ5IHtAbGluayAjZlByb2plY3ROYW1lfS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlTmFtZQotICAgKiAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byByZXRyaWV2ZS4KLSAgICogQHJldHVybiBhbiBJRmlsZS4KLSAgICovCi0gIHByaXZhdGUgSUZpbGUgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpCi0gIHsKLSAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLSAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiLyIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gcm9vdC5nZXRGaWxlKHBhdGgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2E5YjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIEFkZGVkIFhNTCBDYXRhbG9ncyAxLjEgc3VwcG9ydAotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JRGVsZWdhdGVDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklSZXdyaXRlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSVN1ZmZpeEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MQ2F0YWxvZ0lkUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIFRlc3QgdGhhdCBhIGtub3duIGVycm9yIGNhc2UgcmV0dXJucyBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RLbm93bk5vdEV4aXN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgSlVOS19TVFJJTkcgPSAiZG9lc05vdEV4aXN0VGVzdCI7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoSlVOS19TVFJJTkcsIG51bGwpOwotCQlhc3NlcnROdWxsKCJleHBlY3RlZCBubyBtYXRjaCBmb3IgIiArIEpVTktfU1RSSU5HLCByZXNvbHZlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlZHRlc3RXQVBGT1JVTSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMFQoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEYoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwQigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpOwotCX0KLQkKLQkvKioKLQkgKiBXZSBleHBlY3QgdGhlIFhNTENhdGFsb2dSZXNvbHZlciBhbmQgWE1MQ2F0YWxvZ0lkUmVzb2x2ZXIKLQkgKiB0byByZXNvbHZlIHRvIHRoZSBzYW1lIFVSSSBnaXZlbiBhIHB1YmxpYyBpZCBpbiBvdXIgY2F0YWxvZy4KLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMV94bWxyZXNvbHZlcigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEID0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iOwotCQkKLQkJLy8gYnVnIDExNzQyNCwgaGVyZSBld2UgbWFrZSB1cCBhIGJhc2UgbG9jYXRpb24gdG8gc2F0aXNmeSB0aGUgcmVzb2x2ZXIgQVBJCi0JCS8vIHRoYXQgZXhwZWN0cyBhIG5vbi1udWxsIGJhc2UgbG9jYXRpb24KLQkJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RYSFRNTDExLnhtbCI7Ci0JCVhNTENhdGFsb2dJZFJlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dJZFJlc29sdmVyKGJhc2VMb2NhdGlvbiwgbnVsbCk7Ci0JCVN0cmluZyByZXNvbHZlZFhNTF9JZCA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCQotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkWExfQ2F0ID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkWExfQ2F0LCByZXNvbHZlZFhNTF9JZCk7CQkgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDTVhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIik7Ci0JfQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0WEhUTUwxME0oKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0V0FQMTMoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4zLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1VSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYgZHRkIE5PVCBpbiBvdXIgY2F0YWxvZyBjYW4gaGF2ZSBhIGNvbnRlbnQgbW9kZWwgCi0JICogY3JlYXRlZC4gCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4dGVybmFsRFREKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly9oaWJlcm5hdGUuc291cmNlZm9yZ2UubmV0L2hpYmVybmF0ZS1jb25maWd1cmF0aW9uLTMuMC5kdGQiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNRGlyZWN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNQ2F0YWxvZygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9VUklfQ01UZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbnZvaWNlLmR0ZCIsIDE4KTsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlSW5kaXJlY3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW5kaXJlY3RJbnZvaWNlLmR0ZCIsIDE4KTsKLQl9Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0ZJTEUgPSAiZmlsZTovLy91c3IvdG1wL215U2NoZW1hU2NoZW1hLnhzZCI7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0RJUiA9ICJmaWxlOi8vL3Vzci90bXAvc2NoZW1hcy8iOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExPQ0FMX1NDSEVNQV9ESVJfUkVXUklUVEVOID0gImZpbGU6Ly8vdXNyL3RtcC9zY2hlbWFzL2V4YW1wbGUuZHRkIjsKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZzExU3lzdGVtU3VmZml4KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVN1ZmZpeEVudHJ5IHN5c3RlbVN1ZmZpeCA9IChJU3VmZml4RW50cnkpeG1sQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJU3VmZml4RW50cnkuU1VGRklYX1RZUEVfU1lTVEVNKTsKLQkJc3lzdGVtU3VmZml4LnNldFN1ZmZpeCgiWE1MU2NoZW1hLnhzZCIpOwotCQlzeXN0ZW1TdWZmaXguc2V0VVJJKExPQ0FMX1NDSEVNQV9GSUxFKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRklMRSwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVVyaVN1ZmZpeCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlTdWZmaXhFbnRyeSB1cmlTdWZmaXggPSAoSVN1ZmZpeEVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVN1ZmZpeEVudHJ5LlNVRkZJWF9UWVBFX1VSSSk7Ci0JCXVyaVN1ZmZpeC5zZXRTdWZmaXgoIlhNTFNjaGVtYS54c2QiKTsKLQkJdXJpU3VmZml4LnNldFVSSShMT0NBTF9TQ0hFTUFfRklMRSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQlhc3NlcnRFcXVhbHMoTE9DQUxfU0NIRU1BX0ZJTEUsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFSZXdyaXRlU3lzdGVtKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVJld3JpdGVFbnRyeSBzeXN0ZW1TdWZmaXggPSAoSVJld3JpdGVFbnRyeSl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElSZXdyaXRlRW50cnkuUkVXUklURV9UWVBFX1NZU1RFTSk7Ci0JCXN5c3RlbVN1ZmZpeC5zZXRTdGFydFN0cmluZygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGRzLyIpOwotCQlzeXN0ZW1TdWZmaXguc2V0UmV3cml0ZVByZWZpeChMT0NBTF9TQ0hFTUFfRElSKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2R0ZHMvZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVJld3JpdGVVcmkoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlJUmV3cml0ZUVudHJ5IHVyaVN1ZmZpeCA9IChJUmV3cml0ZUVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVJld3JpdGVFbnRyeS5SRVdSSVRFX1RZUEVfVVJJKTsKLQkJdXJpU3VmZml4LnNldFN0YXJ0U3RyaW5nKCJ1cm46ZmlzazoiKTsKLQkJdXJpU3VmZml4LnNldFJld3JpdGVQcmVmaXgoTE9DQUxfU0NIRU1BX0RJUik7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZpc2s6ZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudCh1cmlTdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMURlbGVnYXRlUHVibGljKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSURlbGVnYXRlQ2F0YWxvZyBwdWJsaWNEZWxlZ2F0ZSA9IChJRGVsZWdhdGVDYXRhbG9nKXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSURlbGVnYXRlQ2F0YWxvZy5ERUxFR0FURV9UWVBFX1BVQkxJQyk7Ci0KLQkJLy8gSXJvbmljYWxseSwgd2UgZG9uJ3QgdXNlIFdUUCdzIFJlc29sdmVyIHdoZW4gbG9hZGluZyB0aGUgY2F0YWxvZyBYTUwuCi0JCS8vIEFkZGluZyA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgWE1MIENhdGFsb2dzIFYxLjEvL0VOIiAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGQvY2F0YWxvZy5kdGQiPgotCQkvLyB0byB0aGUgY2F0YWxvZyBiZWxvdyB3aWxsIG1ha2UgdGhlIGxvYWRpbmcgZmFpbC4uLiAKLQotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gbWFrZVRlbXBGaWxlKCJkZWxlZ2F0ZVB1YmxpYyIsICI8Y2F0YWxvZyB4bWxucz1cInVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2dcIlxyXG4iICsKLQkJCSIgICAgICAgcHJlZmVyPVwicHVibGljXCI+XHJcbiIgKyAKLQkJCSIgICAgPHB1YmxpYyBwdWJsaWNJZD1cIi0vL0V4YW1wbGUvL2FuIGV4YW1wbGUgVjEuMC4wLy9FTlwiXHJcbiIgKyAKLQkJCSIgICAgICAgICAgICB1cmk9XCJmaWxlOi8vL2V4YW1wbGUuZHRkXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXB1YmxpY0RlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCItLy9FeGFtcGxlLy8iKTsKLQkJcHVibGljRGVsZWdhdGUuc2V0Q2F0YWxvZ0xvY2F0aW9uKGRlbGVnYXRlQ2F0LnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKCItLy9FeGFtcGxlLy9hbiBleGFtcGxlIFYxLjAuMC8vRU4iLCAiZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscygiZmlsZTovLy9leGFtcGxlLmR0ZCIsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl9Ci0JCWRlbGVnYXRlQ2F0LmRlbGV0ZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFEZWxlZ2F0ZVN5c3RlbSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlEZWxlZ2F0ZUNhdGFsb2cgc3lzdGVtRGVsZWdhdGUgPSAoSURlbGVnYXRlQ2F0YWxvZyl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElEZWxlZ2F0ZUNhdGFsb2cuREVMRUdBVEVfVFlQRV9TWVNURU0pOwotCi0JCUZpbGUgZGVsZWdhdGVDYXQgPSBtYWtlVGVtcEZpbGUoImRlbGVnYXRlU3lzdGVtIiwgIjxjYXRhbG9nIHhtbG5zPVwidXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZ1wiPlxyXG4iICsgCi0JCQkiICAgIDxzeXN0ZW0gc3lzdGVtSWQ9XCJodHRwOi8vZnVua3kub3JnL2RvZ1wiIHVyaT1cImZpbGU6Ly8vZnVua3ktZG9nLmR0ZFwiLz5cclxuIiArIAotCQkJIiAgICA8c3lzdGVtU3VmZml4IHN5c3RlbUlkU3VmZml4PVwiL2NhdC5kdGRcIiB1cmk9XCJmaWxlOi8vL3NtZWxseWNhdC54c2RcIi8+XHJcbiIgKyAKLQkJCSIgICAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz1cImh0dHA6Ly9mdW5reS5vcmcvcGFycm90cy9cIiByZXdyaXRlUHJlZml4PVwiZmlsZTovLy9kdGRzL3BhcnJvdHMvXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXN5c3RlbURlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCJodHRwOi8vZnVua3kub3JnLyIpOwotCQlzeXN0ZW1EZWxlZ2F0ZS5zZXRDYXRhbG9nTG9jYXRpb24oZGVsZWdhdGVDYXQudG9VUkkoKS50b1N0cmluZygpKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1EZWxlZ2F0ZSk7Ci0JCXRyeSB7CQkJCi0JCQlhc3NlcnRFcXVhbHMoInRyeSBzeXN0ZW1JZCBlbnRyeSIsICJmaWxlOi8vL2Z1bmt5LWRvZy5kdGQiLCB4bWxDYXRhbG9nLnJlc29sdmVTeXN0ZW0oImh0dHA6Ly9mdW5reS5vcmcvZG9nIikpOwotCQkJYXNzZXJ0RXF1YWxzKCJ0cnkgc3lzdGVtU3VmZml4IGVudHJ5IiwgImZpbGU6Ly8vc21lbGx5Y2F0LnhzZCIsIHhtbENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL2Z1bmt5Lm9yZy9zb21lL2NhdC5kdGQiKSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRyeSByZXdyaXRlU3lzdGVtIGVudHJ5IiwgImZpbGU6Ly8vZHRkcy9wYXJyb3RzL21hY2F3LnhzZCIsIHhtbENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL2Z1bmt5Lm9yZy9wYXJyb3RzL21hY2F3LnhzZCIpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoc3lzdGVtRGVsZWdhdGUpOwotCQl9Ci0JCWRlbGVnYXRlQ2F0LmRlbGV0ZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFEZWxlZ2F0ZVVyaSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlEZWxlZ2F0ZUNhdGFsb2cgdXJpRGVsZWdhdGUgPSAoSURlbGVnYXRlQ2F0YWxvZyl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElEZWxlZ2F0ZUNhdGFsb2cuREVMRUdBVEVfVFlQRV9VUkkpOwotCi0JCUZpbGUgZGVsZWdhdGVDYXQgPSBtYWtlVGVtcEZpbGUoImRlbGVnYXRlVXJpIiwgIjxjYXRhbG9nIHhtbG5zPVwidXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZ1wiPlxyXG4iICsgCi0JCQkiICAgIDx1cmkgbmFtZT1cInVybjpmdW5reTpkb2dcIiB1cmk9XCJmaWxlOi8vL2Z1bmt5LWRvZy5kdGRcIi8+XHJcbiIgKyAKLQkJCSIgICAgPHVyaVN1ZmZpeCB1cmlTdWZmaXg9XCI6Y2F0XCIgdXJpPVwiZmlsZTovLy9zbWVsbHljYXQuZHRkXCIvPlxyXG4iICsgCi0JCQkiICAgIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPVwidXJuOmZ1bmt5OmZpc2g6XCIgcmV3cml0ZVByZWZpeD1cImZpbGU6Ly8vZHRkcy9cIi8+XHJcbiIgKyAKLQkJCSI8L2NhdGFsb2c+Iik7Ci0KLQkJdXJpRGVsZWdhdGUuc2V0U3RhcnRTdHJpbmcoInVybjpmdW5reToiKTsKLQkJdXJpRGVsZWdhdGUuc2V0Q2F0YWxvZ0xvY2F0aW9uKGRlbGVnYXRlQ2F0LnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpRGVsZWdhdGUpOwotCQl0cnkgewkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1cmkgZW50cnkiLCAiZmlsZTovLy9mdW5reS1kb2cuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6ZG9nIikpOwotCQkJYXNzZXJ0RXF1YWxzKCJ1cmlTdWZmaXggZW50cnkiLCAiZmlsZTovLy9zbWVsbHljYXQuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6d2hlcmUtaXMtbXk6Y2F0IikpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXdyaXRlVXJpIGVudHJ5IiwgImZpbGU6Ly8vZHRkcy9wYXJyb3QuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6ZmlzaDpwYXJyb3QuZHRkIikpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudCh1cmlEZWxlZ2F0ZSk7Ci0JCX0KLQkJZGVsZWdhdGVDYXQuZGVsZXRlKCk7Ci0JfQotCi0JcHJpdmF0ZSBGaWxlIG1ha2VUZW1wRmlsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNvbnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoImNhdGFsb2dzIiwgbmFtZSwgImNhdCIpOwotCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZGVsZWdhdGVDYXQpOwotCQlmdy53cml0ZShjb250ZW50cyk7Ci0JCWZ3LmNsb3NlKCk7Ci0JCWRlbGVnYXRlQ2F0LmdldFBhcmVudEZpbGUoKS5kZWxldGVPbkV4aXQoKTsKLQkJcmV0dXJuIGRlbGVnYXRlQ2F0OwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgcmVzb2x2ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNVGVzdChTdHJpbmcgRVhQRUNURURfUFVCTElDSUQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1BVQkxJQ0lELCBjb250ZW50TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNX2RpcmVjdFVSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KFN0cmluZyBFWFBFQ1RFRF9VUkksIGludCBjb3VudCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCQlpbnQgYWN0dWFsQ291bnQgPSBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKTsgCi0JCWFzc2VydEVxdWFscygiY291bnQgb2YgZWxlbWVudCBkZWNsYXJhdGlvbnMgZm91bmQgZm9yIGNvbnRlbnQgbW9kZWwgY3JlYXRlIGZyb20gIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCksIGFjdHVhbENvdW50KTsJCQotCX0JCi0KLQlwcml2YXRlIHZvaWQgZG9VUklUZXN0KFN0cmluZyBFWFBFQ1RFRF9VUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQotCX0KLQkgdm9pZCBkb1VSSV9DTVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkgCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVVUkkoRVhQRUNURURfVVJJKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfVVJJLCByZXNvbHZlZCk7Ci0JCQotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KHJlc29sdmVkLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gY3JlYXRlIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBFWFBFQ1RFRF9VUkksIGNvbnRlbnRNb2RlbCk7Ci0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmM2VlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuTG9jYXRpb25LaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggZnVsbFBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZ1bGxQYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudDogIiArIChkb2N1bWVudCAhPSBudWxsID8gZG9jdW1lbnQuZ2V0Q2xhc3MoKSA6IG51bGwpLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgSURvY3VtZW50RXh0ZW5zaW9uMyIsIGRvY3VtZW50IGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIGFjdHVhbFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQ6ICIgKyBhY3R1YWxQYXJ0aXRpb25lciwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShhY3R1YWxQYXJ0aXRpb25lcikpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0KLS8vCQlkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKGZpbGUsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQkgCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcGFyYW0gZXhwZWN0ZWREb2N1bWVudENsYXNzCi0JICogQHBhcmFtIGV4cGVjdGVkUGFydGlvbmVyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotLy8JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoSUZpbGUgZmlsZSwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLS8vCQlEb2N1bWVudExvYWRlckZvclhNTCBkb2N1bWVudExvYWRlckZvclhNTCA9IG5ldyBEb2N1bWVudExvYWRlckZvclhNTCgpOwotLy8JCUlEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50TG9hZGVyRm9yWE1MLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlLCBudWxsKTsKLS8vCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0vLwl9Ci0KLS8vCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVFbXB0eShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLS8vCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgiVGVzdCBDYXNlIGluIGVycm9yLiBOb24tZXhpc3RlbnQgZmlsZSBleGlzdGVkISAiICsgZmlsZVBhdGgsIGZpbGUgPT0gbnVsbCk7Ci0vLwkJSVBhdGggbG9jYXRpb25QYXRoID0gbmV3IFBhdGgoZmlsZVBhdGgpOwotLy8JCUlGaWxlIG5vbkV4aXN0aW5nRmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGxvY2F0aW9uUGF0aCk7Ci0vLwkJbG9jYXRpb25QYXRoID0gbm9uRXhpc3RpbmdGaWxlLmdldEZ1bGxQYXRoKCk7Ci0vLwkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0vLwkJLy8gY2FuIG5vdCAiY29ubmVjdCIgdG8gbm9uLWV4aXN0YW50IGxvY2F0aW9uCi0vLwkJLy9idWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLS8vCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXJNYW5hZ2VyLmNyZWF0ZUVtcHR5RG9jdW1lbnQobG9jYXRpb25QYXRoLCBMb2NhdGlvbktpbmQuSUZJTEUpOwotLy8JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotLy8JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLS8vCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudDogIiArIGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCkpKTsKLS8vCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBMb2NhdGlvbktpbmQuSUZJTEUsIG51bGwpOwotLy8KLS8vCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0Q3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkvKgotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JDU1MuY2xhc3MpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0qLwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGMxZDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi1wdWJsaWMgY2xhc3MgR2V0RG9jdW1lbnRSZWdpb25zVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gZkFscmVhZHlTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBmVGV4dCA9IG51bGw7Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIWZBbHJlYWR5U2V0dXApIHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gY3JlYXRlTW9kZWwoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCQlmRG9jID0gc01vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZlRleHQgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiB0ZXh0IDwvYm9keT48L2h0bWw+IjsKLQkJCWZEb2Muc2V0KGZUZXh0KTsKLQkJCWZBbHJlYWR5U2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbGxSZWdpb25zKCkgewotCi0JCS8vIGFsbCByZWdpb25zCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCA3LCAiPGh0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZUVuZHMoKSB7Ci0JCQotCQkvLyBsZWF2ZSBvZmYgdGhlIGVuZCByZWdpb25zCi0JCS8vIDxodG1sPls8aGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+XTwvaHRtbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoNixmVGV4dC5sZW5ndGgoKSAtICg2KzcpKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDUsICI8aGVhZD4iLCAiPC9ib2R5PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbmNsdWRlRW5kcygpIHsKLQkJCi0JCS8vIGluY2x1ZGUgZW5kIHJlZ2lvbnMKLQkJLy8gPGh0W21sPjxoZWFkPjwvaGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+PC9odF1tbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMyxmVGV4dC5sZW5ndGgoKS0gKDMrMykpOwotCQlhc3NlcnRFcXVhbHMoNywgcmVnaW9ucy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaXJzdFR3bygpIHsKLQkJLy8gZmlyc3QgMiByZWdpb25zCi0JCS8vIDxoW3RtbD48aF1lYWQ+PC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygyLDYpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMiwgIjxodG1sPiIsICI8aGVhZD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmlnaHRTZWFtKCkgewotCQkvLyByaWdodCBzZWFtCi0JCS8vIFs8aHRtbD48aGVhZD5dPC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDEyKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDIsICI8aHRtbD4iLCAiPGhlYWQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExlZnRTZWFtKCkgewotCQkvLyBsZWZ0IHNlYW0KLQkJLy8gPC9ib2R5Pls8L2h0bWw+XQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyhmVGV4dC5sZW5ndGgoKS03LCA3KTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDEsICI8L2h0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGFzdCgpIHsKLQkJLy8gbGFzdCByZWdpb24gb25seQotCQkvLyA8L2JvZHk+PC9odG1sPnwKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoZlRleHQubGVuZ3RoKCksIDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjwvaHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGaXJzdCgpIHsKLQkJLy8gZmlyc3QgcmVnaW9uIG9ubHkKLQkJLy8gfDxodG1sPjxoZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjxodG1sPiIsICI8aHRtbD4iKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zLCBpbnQgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyBmaXJzdFRleHQsIFN0cmluZyBsYXN0VGV4dCkgewotCQkKLQkJLy9mb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbnMubGVuZ3RoOyBpKyspIAotCQkvLwlTeXN0ZW0ub3V0LnByaW50bG4ocmVnaW9uc1tpXS5nZXRUZXh0KCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTGVuZ3RoLCByZWdpb25zLmxlbmd0aCk7Ci0JCQotCQlTdHJpbmcgdGV4dCA9IHJlZ2lvbnNbMF0uZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGV4dCwgZmlyc3RUZXh0KTsKLQkJCi0JCXRleHQgPSByZWdpb25zW3JlZ2lvbnMubGVuZ3RoLTFdLmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRleHQsIGxhc3RUZXh0KTsKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDE3MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFN0cnVjdHVyZWREb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBUZXN0TGlzdGVuZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCi0JCWJvb2xlYW4gbmV3TW9kZWxDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiBub0NoYW5nZUNhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIG5vZGVzUmVwbGFjZWRDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiByZWdpb25DaGFuZ2VkQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gcmVnaW9uc1JlcGxhY2VkQ2FsbGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbmV3TW9kZWxDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9DaGFuZ2VDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9kZXNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJcmVnaW9uQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCXJlZ2lvbnNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWREb2N1bWVudCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCQotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICovCi0JSVN0cnVjdHVyZWRNb2RlbCBnZXRUZXN0TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZlByb2plY3ROYW1lKTsKLQkJSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHByb2plY3QuZmluZE1lbWJlcigiL2ZpbGVzL3NpbXBsZS54bWwiKTsKLQkJLy8gZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIgotCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoaUZpbGUpOwotCi0KLQkJcmV0dXJuIG1vZGVsOwotCi0JfQotCi0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVE9ETzogbWF5IG5lZWQgdG8gZmFrZSBldmVudHMgdG8gcmVhbGx5IHRlc3RzIHRoaXMKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RMaXN0ZW5lcigpOwotCi0JCQlzRG9jLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0KCk7Ci0JCQlzRG9jLnJlcGxhY2UoMCwgdGV4dC5sZW5ndGgoKSwgdGV4dCk7Ci0KLQkJCXNEb2MucmVtb3ZlRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZE9ubHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldCgpOwotCi0JCQlzRG9jLmNsZWFyUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSk7Ci0JCQlhc3NlcnRGYWxzZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCi0JCQlzRG9jLm1ha2VSZWFkT25seSgwLCAxMCk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSg5LCAxKSk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0KLQkJCXNEb2MuY2xlYXJSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKTsKLQkJCWFzc2VydEZhbHNlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSBzRG9jLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDApOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBhdCBvZmZzZXQ6IDAiLCByKTsKLQotCQkJciA9IHNEb2MuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoc0RvYy5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGF0IG9mZnNldDogIiArIHNEb2MuZ2V0TGVuZ3RoKCksIHIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkxpc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBzRG9jLmdldFJlZ2lvbkxpc3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gbGlzdCIsIHJlZ2lvbnMpOwotCQkJYXNzZXJ0RXF1YWxzKDE3LCByZWdpb25zLmdldExlbmd0aCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldFRleHQoKTsKLQkJCVN0cmluZyBleHBlY3RlZFRleHQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cclxuPGxpc3Q+XHJcblx0PGl0ZW0xIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiPlxyXG5cdFx0b25lXHJcblx0PC9pdGVtMT5cclxuXHQ8aXRlbTIgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCIgPlxyXG5cdFx0dHdvXHJcblx0PC9pdGVtMj5cclxuXHQ8aXRlbTMgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCI+XHJcblx0XHR0aHJlZVxyXG5cdDwvaXRlbTM+XHJcbjwvbGlzdD4iOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IG5ld0RvYyA9IHNEb2MubmV3SW5zdGFuY2UoKTsKLQkJCWFzc2VydE5vdFNhbWUoImRvY3VtZW50IGluc3RhbmNlcyBzaG91bGQgYmUgZGlmZmVyZW50Iiwgc0RvYywgbmV3RG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2UoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVdpdGhNb2RpZmljYXRpb25TdGFtcCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJCi0JCQkJZXh0NC5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIsIG1vZGlmaWNhdGlvblN0YW1wKTsKLQkJCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJCWFzc2VydEVxdWFscygicmVwbGFjZWQiLCB0ZXh0KTsKLQkJCQkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlVGV4dCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZVJlYWRPbmx5UmVwbGFjZVRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2MubWFrZVJlYWRPbmx5KDAsIDEpOwotCQkJCi0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJCi0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCQkJYXNzZXJ0Tm90U2FtZSgidGV4dCBzaG91bGQgbm90IGhhdmUgYmVlbiByZXBsYWNhYmxlIChyZWFkIG9ubHkpIiwgInJlcGxhY2VkIiwgc0RvYy5nZXRUZXh0KCkpOwotCQkJCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIChyZWFkIG9ubHkpIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJCi0JCQltb2RpZmljYXRpb25TdGFtcCA9IC0xOwotCQkJaWYgKHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb240KSB7Ci0JCQkJbW9kaWZpY2F0aW9uU3RhbXAgPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQl9Ci0JCQkKLQkJCXNEb2MucmVwbGFjZVRleHQodGhpcywgMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIiwgdHJ1ZSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRleHQgc2hvdWxkIGhhdmUgYmVlbiBmb3JjZWQgcmVwbGFjZWQiLCAicmVwbGFjZWQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInJlcGxhY2UgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnNldCgic2V0IHRleHQiKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJzZXQgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRXaXRoTW9kaWZpY2F0aW9uU3RhbXAoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJZXh0NC5zZXQoInNldCB0ZXh0IiwgbW9kaWZpY2F0aW9uU3RhbXApOwotCi0JCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic2V0IHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5zZXRUZXh0KHRoaXMsICJzZXQgdGV4dCIpOwotCi0JCQlhc3NlcnRFcXVhbHMoInNldCB0ZXh0IGZhaWxlZCIsICJzZXQgdGV4dCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInNldCB0ZXh0IG1vZGlmaWNhdGlvbiBzdGFtcCBmYWlsZWQiLCBtb2RpZmljYXRpb25TdGFtcCAhPSgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RW5jb2RpbmdNZW1lbnRvKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbnVsbDsKLQkJCXNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gc0RvYy5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBlbmNvZGluZyBtZW1lbnRvIiwgbWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgZmlyc3QgZGVsaW1pdGVyIGlzIFxyXG4gcmVnYXJkbGVzcyBvZgotCSAqIHByZWZlcmVuY2VzIG9yIHBsYXRmb3JtCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERldGVjdGVkTGluZURlbGltaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0TGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBwcmVmZXJyZWQgbGluZSBkZWxtaXRlciIsICJcclxuIiwgZGVsaW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbmNvZGluZ01lbWVudG8oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gbmV3IEVuY29kaW5nTWVtZW50bygpOwotCQkJc0RvYy5zZXRFbmNvZGluZ01lbWVudG8obWVtZW50byk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZ290dGVuTWVtZW50byA9IHNEb2MuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIm1lbWVudG9zIGRvbid0IG1hdGNoIiwgbWVtZW50bywgZ290dGVuTWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBzZXREZXRlY3RlZExpbmVEZWxpbWl0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2Muc2V0UHJlZmVycmVkTGluZURlbGltaXRlcigiXG4iKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgbGluZSBkZWxpbWl0ZXIgZmFpbGVkIiwgIlxuIiwgZGVsaW0pOwotCi0JCQlzRG9jLnNldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoIlxyXG4iKTsKLQkJCWRlbGltID0gc0RvYy5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInNldCBsaW5lIGRlbGltaXRlciBmYWlsZWQiLCAiXHJcbiIsIGRlbGltKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nTWF0Y2hlcygpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIGEgdGVzdCB3aGVuIHRoaXMgQVBJIGlzIGNyZWF0ZWQKLQkJLy8gSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQkvLyBJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9zaXRpb24oKSB0aHJvd3MgQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlQb3NpdGlvbiBwID0gbmV3IFBvc2l0aW9uKDAsIDEwKTsKLQkJCVN0cmluZ1tdIGNhdGVnb3JpZXMgPSBzRG9jLmdldFBvc2l0aW9uQ2F0ZWdvcmllcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJc0RvYy5hZGRQb3NpdGlvbihjYXRlZ29yaWVzW2ldLCBwKTsKLQkJCX0KLQkJCWludCBmb3VuZCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlQb3NpdGlvbltdIHBvc2l0aW9ucyA9IHNEb2MuZ2V0UG9zaXRpb25zKGNhdGVnb3JpZXNbaV0pOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgcG9zaXRpb25zLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChwb3NpdGlvbnNbal0gPT0gcCkgewotCQkJCQkJZm91bmQrKzsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGNhdGVnb3JpZXMubGVuZ3RoLCBmb3VuZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqIFRlc3RzIHRoYXQgd2hlbiBhIHRhZyBpcyByZWFkLW9ubHksIGl0cyBlbnRpcmV0eSBpcyByZWFkLW9ubHkuICovCi0JcHVibGljIHZvaWQgdGVzdFJlYWRPbmx5VGFnKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSkgbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigyMyk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgbm9kZSIsIG5vZGUpOwotCQkJLy8gYWxsIGRlc2NlbmRhbnRzIGFyZSByZWFkLW9ubHkKLQkJCW5vZGUuc2V0Q2hpbGRFZGl0YWJsZShmYWxzZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnRUcnVlKGRvY3VtZW50LmNvbnRhaW5zUmVhZE9ubHkoODAsIDApKTsKLQkJCQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RYTUxEb2N1bWVudExvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1N2EwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RYTUxEb2N1bWVudExvYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkJCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RW1wdHlTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB7Ci0KLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgRW1wdHkgZG9jdW1lbnQiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tRmlsZSgpIHsKLQkJLy8gZnJvbSBhIGZpbGUJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSUZpbGUiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tSW5wdXRTdHJlYW0oKSB7Ci0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIiwgZG9jdW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RG9jdW1lbnRGcm9tUmVhZGVyV2l0aEVuY29kaW5nUnVsZSgpIHsKLQkJCi0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkuZ2V0VVJMKCkuZ2V0UGF0aCgpLnRvU3RyaW5nKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIHdpdGggRW5jb2RpbmdSdWxlIiwgZG9jdW1lbnQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1RyYW5zaXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWUxYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNpdGlvblRlc3RzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUcmFuc2l0aW9uVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0U29mdFJldmVydCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiOyAvLyROT04tTkxTLTEkCi0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGVzdCBDYXNlIGluIGVycm9yLiBDb3VsZCBub3QgZmluZCBmaWxlICIgKyBmaWxlUGF0aCwgZmlsZSk7IC8vJE5PTi1OTFMtMSQKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBkb2N1bWVudCBpbnN0YW5jZW9mIEJhc2ljU3RydWN0dXJlZERvY3VtZW50KTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiX18iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoMiwgMCwgIjxhIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDQsIDAsICI+Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDUsIDAsICIgICIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoZSk7Ci0JCQl9Ci0JCQlkb2N1bWVudC5zZXQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQotCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDdjYTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi0vKiAKLSAqIE1hZGUgYWJzdHJhY3QsIHNvIHdvbid0IGJlIGF1dG9tYXRpY2FsbHkgcGlja2VkIHVwIGFzIHRlc3QgKHNpbmNlIGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQpLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vQXR0ckltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjYzN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotcHVibGljIGNsYXNzIEF0dHJJbXBsVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29udGVudHMgPSAiPGVsZW1lbnROYW1lIGF0dHJQcmVmaXg6bG9jYWw9J2xvcmVtJyAvPiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgeG1sTmFtZXNwYWNlQ29udGVudHMgPSAiPGVsZW1lbnROYW1lIHhtbDpzcGFjZT1cInByZXNlcnZlXCIvPiI7Ci0KLQlwdWJsaWMgQXR0ckltcGxUZXN0cygpIHsKLQl9Ci0KLQlwdWJsaWMgQXR0ckltcGxUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0ckltcGxQcmVmaXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCQkKLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJubyBhdHRyaWJ1dGVzIGZvdW5kIiwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA+IDApOwotCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIHByZWZpeCB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImF0dHJQcmVmaXgiLCBhdHRyaWJ1dGUuZ2V0UHJlZml4KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRySW1wbExvY2FsTmFtZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJubyBhdHRyaWJ1dGVzIGZvdW5kIiwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA+IDApOwotCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIGxvY2FsIG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJsb2NhbCIsIGF0dHJpYnV0ZS5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZVVSSU9uQ3JlYXRpb24oKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUF0dHIgYXR0ciA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlKCJzaW1wbGUiKTsKLQkJYXNzZXJ0TnVsbCgibmFtZXNwYWNlIHdhcyBmb3VuZCIsIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQkKLQkJQXR0ciBhdHRyMiA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlTlMoImh0dHA6Ly9sb3JlbS5pcHN1bSIsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJodHRwOi8vbG9yZW0uaXBzdW0iLCBhdHRyMi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCUF0dHIgYXR0cjMgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZU5TKG51bGwsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsIG51bGwsIGF0dHIzLmdldE5hbWVzcGFjZVVSSSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TnVsbEF0dHJpYnV0ZVZhbHVlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJQXR0ciBhdHRyaWJ1dGUgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZSgiYXR0ciIpOwotCQl0cnkgewotCQkJYXR0cmlidXRlLnNldE5vZGVWYWx1ZShudWxsKTsKLQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7Ci0JCQlmYWlsKCJTZXR0aW5nIGEgbnVsbCBub2RlIHZhbHVlIGNhdXNlZCBhIE51bGxQb2ludGVyRXhjZXB0aW9uLiIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEF0dHJpYnV0ZU5TRm9yWE1MTmFtZXNwYWNlKCkgewotCQlmaW5hbCBTdHJpbmcgeG1sbnMgPSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCh4bWxOYW1lc3BhY2VDb250ZW50cyk7Ci0KLQkJRWxlbWVudCBlbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJU3RyaW5nIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyh4bWxucywgInNwYWNlIik7Ci0JCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIHNwYWNlIGF0dHJpYnV0ZSBmb3IgWE1MIE5hbWVzcGFjZSIsICJwcmVzZXJ2ZSIsIHZhbHVlKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9FbGVtZW50SW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vRWxlbWVudEltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVlNTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9FbGVtZW50SW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50SW1wbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRlbnRzID0gIjxlbGVtZW50UHJlZml4OmxvY2FsTmFtZSBhdHRyUHJlZml4OmxvY2FsPSdsb3JlbScgeG1sbnM6ZWxlbWVudFByZWZpeD0ndXJuOnByZWZpeCcgeG1sbnM6YXR0cmlidXRlUHJlZml4PSd1cm46YXR0cmlidXRlOnByZWZpeCcgLz4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGRlY2wgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBFbGVtZW50SW1wbFRlc3RzKCkgewotCX0KLQotCXB1YmxpYyBFbGVtZW50SW1wbFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbGVtZW50SW1wbFByZWZpeCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgcHJlZml4IHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiZWxlbWVudFByZWZpeCIsIGRvY3VtZW50RWxlbWVudC5nZXRQcmVmaXgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVsZW1lbnRJbXBsTG9jYWxOYW1lKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBsb2NhbCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAibG9jYWxOYW1lIiwgZG9jdW1lbnRFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0ckJhc2VkRWxlbWVudE5hbWVzcGFjZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJYXNzZXJ0Tm90TnVsbCgiTmFtZXNwYWNlIHdhcyBub3QgZm91bmQuIiwgZG9jdW1lbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IGRvY3VtZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbG9jYWwgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgInVybjpwcmVmaXgiLCBuYW1lc3BhY2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROYW1lc3BhY2VVUklPbkNyZWF0aW9uKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoInNpbXBsZSIpOwotCQlhc3NlcnROdWxsKCJuYW1lc3BhY2Ugd2FzIGZvdW5kIiwgZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLQkJRWxlbWVudCBlbGVtZW50MiA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vbG9yZW0uaXBzdW0iLCAiY29tcGxleCIpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJJIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiaHR0cDovL2xvcmVtLmlwc3VtIiwgZWxlbWVudDIuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQlFbGVtZW50IGVsZW1lbnQzID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50TlMobnVsbCwgImNvbXBsZXgiKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbmFtZXNwYWNlIFVSSSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgbnVsbCwgZWxlbWVudDMuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZU5vQ2hpbGRyZW4oKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyb290Iik7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKHJvb3QpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotCQlhc3NlcnRFcXVhbHMoMCwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZUNoaWxkcmVuKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicm9vdCIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQotCQlOb2RlTGlzdCBjaGlsZHJlbiA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVDaGlsZHJlbkJ5U2FtZU5hbWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQotCQlOb2RlTGlzdCBjaGlsZHJlbiA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNoaWxkIik7Ci0JCWFzc2VydEVxdWFscygyLCBjaGlsZHJlbi5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OnJvb3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QiLCAiaHR0cDovL3Rlc3QiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vdGVzdCIsICIqIik7Ci0JCWFzc2VydEVxdWFscygyLCBjaGlsZHJlbi5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lTlNUZXN0TlMoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OnJvb3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QiLCAiaHR0cDovL3Rlc3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QyIiwgImh0dHA6Ly90ZXN0MiIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCQlyb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q6Y2hpbGQiKSk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDI6Y2hpbGQiKSk7Ci0KLQkJTm9kZUxpc3QgY2hpbGRyZW4gPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly90ZXN0IiwgIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVOU0FueU5TKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpyb290Iik7Ci0JCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp0ZXN0IiwgImh0dHA6Ly90ZXN0Iik7Ci0JCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp0ZXN0MiIsICJodHRwOi8vdGVzdDIiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCQlyb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyOmNoaWxkIikpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhjNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5OYW1lVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgTmFtZVZhbGlkYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBpbnQgblRyaWFscyA9IDEwMDsKLQotCXB1YmxpYyBOYW1lVmFsaWRhdG9yVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdChpbnQgdGVzdE51bWJlciwgU3RyaW5nIHRlc3RTdHJpbmcsIEJvb2xlYW4gZXhwZWN0ZWRWYWxpZGl0eSkgewotLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlib29sZWFuIGlzVmFsaWQgPSBOYW1lVmFsaWRhdG9yLmlzVmFsaWQodGVzdFN0cmluZyk7Ci0JCWFzc2VydEVxdWFscygidGVzdE51bWJlcjogIiArIHRlc3ROdW1iZXIsIGV4cGVjdGVkVmFsaWRpdHkuYm9vbGVhblZhbHVlKCksIGlzVmFsaWQpOwotLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKLQkJT2JqZWN0W11bXSB0ZXN0ZWVzID0gbmV3IE9iamVjdFtdW117Ci0JCQkJCXsiaW5pdGlhbCIsQm9vbGVhbi5UUlVFfSwgLy8wCi0JCQkJCXsiZm9vIixCb29sZWFuLlRSVUV9LAkgIC8vMQotCQkJCQl7IjQiLEJvb2xlYW4uRkFMU0V9LAkgIC8vMgotCQkJCQl7Ijk5OTkiLCBCb29sZWFuLkZBTFNFfSwgIC8vMwotCQkJCQl7ImY5OTk5IiwgQm9vbGVhbi5UUlVFfSwgIC8vNAotCQkJCQl7IiIsIEJvb2xlYW4uRkFMU0V9LCAgICAgIC8vNQotCQkJCQl7ImdvdCBzcGFjZSIsIEJvb2xlYW4uRkFMU0V9LCAvLzYKLQkJCQkJeyIgc3BhY2ViZWZvcmUiLCBCb29sZWFuLkZBTFNFfSwgLy83Ci0JCQkJCXsic3BhY2VhZnRlciAiLCBCb29sZWFuLkZBTFNFfSwgIC8vOAotCQkJCQl7Im5zOm5hbWVzcGFjZSIsIEJvb2xlYW4uVFJVRX0sICAvLzkKLQkJCQkJeyI6ZnVubnlucyIsIEJvb2xlYW4uVFJVRX0sICAgICAvLzEwCi0JCQkJCS8qIElTU1VFOiBpcyAiZW5kbnM6IiByZWFsbHkgdmFsaWQgbmFtZSAqLwotCQkJCQl7ImVuZG5zOiIsIEJvb2xlYW4uVFJVRX0sICAgLy8xMQotCQkJCQl7InVzX3VuZGVyc2NvcmUiLCBCb29sZWFuLlRSVUV9LCAgLy8xMgotCQkJCQl7Il91bmRlcnNjb3JlIiwgQm9vbGVhbi5UUlVFfSwgICAvLzEzCi0JCQkJCXsidW5kZXJzY29yZV8iLCBCb29sZWFuLlRSVUV9LCAgICAvLzE0Ci0JCQkJCXsiYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplIiwgQm9vbGVhbi5UUlVFfSwgLy8xNQotCQkJCQl7IjxicmFja2V0IiwgQm9vbGVhbi5GQUxTRX0sIC8vMTYKLQkJCQkJeyJicmFja2V0PCIsIEJvb2xlYW4uRkFMU0V9LCAvLzE3Ci0JCQkJCXsiYnJhY2tldCIsIEJvb2xlYW4uVFJVRX0sIC8vMTgKLQkJCQkJeyJwZXIuaW9kIiwgQm9vbGVhbi5UUlVFfSwgLy8xOQotCQkJCQl9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRlc3RlZXMubGVuZ3RoOyBpKyspIHsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJZG9UZXN0KGksIChTdHJpbmcpdGVzdGVlc1tpXVswXSwgKEJvb2xlYW4pIHRlc3RlZXNbaV1bMV0pOwotCQkJfQotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUNvbnRhaW5lclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUNvbnRhaW5lclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTA5NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVDb250YWluZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBOb2RlQ29udGFpbmVyVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF8xID0gIjxyb290PjxhIGlkPSdhJz48L2E+PC9yb290PiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfMiA9ICI8cm9vdD48YSBpZD0nYSc+PGIgaWQ9J2InPjwvYj48L2E+PC9yb290PiI7Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIE5vZGVDb250YWluZXJUZXN0cygpIHsKLQkJc3VwZXIoIlRlc3QgTm9kZUNvbnRhaW5lciIpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yCi0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhpcyB0ZXN0IHJ1bgotCSAqLwotCXB1YmxpYyBOb2RlQ29udGFpbmVyVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFwcGVuZFZhbGlkQ2hpbGQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoQ09OVEVOVF8xKTsKLQotCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGEgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdhJyBpbiAiICsgQ09OVEVOVF8xLCBhKTsKLQotCQlFbGVtZW50IGIgPSBkb2MuY3JlYXRlRWxlbWVudCgiYiIpOwotCQliLnNldEF0dHJpYnV0ZSgiaWQiLCAiYiIpOwotCi0JCXRyeSB7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQl9IGNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiU2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGFwcGVuZCAiICsgYiArICIgYXMgYSBjaGlsZCBvZiAiICsgYSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kUGFyZW50QXNDaGlsZE9mQ2hpbGQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoQ09OVEVOVF8yKTsKLQotCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGEgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdhJyBpbiAiICsgQ09OVEVOVF8yLCBhKTsKLQotCQlFbGVtZW50IGIgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdiJyBpbiAiICsgQ09OVEVOVF8yLCBiKTsKLQotCQlib29sZWFuIHRocmV3RXhjZXB0aW9uID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQliLmFwcGVuZENoaWxkKGEpOwotCQl9IGNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0RXF1YWxzKCJXcm9uZyB0eXBlIG9mIGV4Y2VwdGlvbiB3YXMgdGhyb3duOiAiICsgZSwgRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgZS5jb2RlKTsKLQkJCXRocmV3RXhjZXB0aW9uID0gdHJ1ZTsKLQkJfQotCi0JCWFzc2VydFRydWUoIkEgRE9NRXhjZXB0aW9uIHdpdGggY29kZSBISUVSQVJDSFlfUkVRVUVTVF9FUlIgc2hvdWxkIGhhdmUgYmVlbiB0aHJvd24gd2hlbiBhcHBlbmRpbmcgYSBwYXJlbnQgdG8gaXRzIG93biBjaGlsZCIsIHRocmV3RXhjZXB0aW9uKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9Ob2RlTGlzdEltcGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVMaXN0SW1wbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZWM2Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVMaXN0SW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuTm9kZUxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIE5vZGVMaXN0SW1wbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQWNjZXNzb3JOb2RlTGlzdCBleHRlbmRzIE5vZGVMaXN0SW1wbCB7Ci0JCXB1YmxpYyBOb2RlIGFwcGVuZE5vZGUoTm9kZSBub2RlKSB7Ci0JCQlyZXR1cm4gc3VwZXIuYXBwZW5kTm9kZShub2RlKTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIGluc2VydE5vZGUoTm9kZSBub2RlLCBpbnQgaW5kZXgpIHsKLQkJCXJldHVybiBzdXBlci5pbnNlcnROb2RlKG5vZGUsIGluZGV4KTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIHJlbW92ZU5vZGUoaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gc3VwZXIucmVtb3ZlTm9kZShpbmRleCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBOb2RlTGlzdEltcGxUZXN0cygpIHsKLQl9Ci0KLQlwdWJsaWMgTm9kZUxpc3RJbXBsVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydEF0SW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlhc3NlcnRFcXVhbHMoIm5vbi16ZXJvIGxlbmd0aCBhdCBzdGFydCIsIDAsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QxIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDIiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q0IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDUiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NiIpKTsKLQotCQlsaXN0Lmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdCIpLCAzKTsKLQkJCi0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgOCwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoInRlc3QwIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDAiLCBsaXN0Lml0ZW0oMCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QxIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDEiLCBsaXN0Lml0ZW0oMSkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QyIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDIiLCBsaXN0Lml0ZW0oMikuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Qgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICAidGVzdCIsICBsaXN0Lml0ZW0oMykuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QzIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDMiLCBsaXN0Lml0ZW0oNCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q0IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDQiLCBsaXN0Lml0ZW0oNSkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q1IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDUiLCBsaXN0Lml0ZW0oNikuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q2IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDYiLCBsaXN0Lml0ZW0oNykuZ2V0TG9jYWxOYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDAiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MSIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDMiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q1IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHNldHVwIiwgNywgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJTm9kZSBleGNpc2VkID0gbGlzdC5yZW1vdmVOb2RlKDMpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QzIHdhcyBub3QgdGhlIG9uZSByZW1vdmVkIiwgInRlc3QzIiwgZXhjaXNlZC5nZXRMb2NhbE5hbWUoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgcmVtb3ZhbCIsIDYsIGxpc3QuZ2V0TGVuZ3RoKCkpOwkJCi0JCWFzc2VydEVxdWFscygidGVzdDAgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MCIsIGxpc3QuaXRlbSgwKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDEgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MSIsIGxpc3QuaXRlbSgxKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDIgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MiIsIGxpc3QuaXRlbSgyKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDQgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NCIsIGxpc3QuaXRlbSgzKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDUgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NSIsIGxpc3QuaXRlbSg0KS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDYgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NiIsIGxpc3QuaXRlbSg1KS5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydEF0TmVnYXRpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCS8vIGFwcGVuZHMgb24gYmFkIHZhbHVlCi0JCWxpc3QuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0LTEiKSwtMSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIGluc2VydCBhdCBuZWdhdGl2ZSBpbmRleCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tTmVnYXRpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0LTEiKSk7Ci0JCS8vIGlnbm9yZXMgYmFkIGluZGV4Ci0JCWxpc3QucmVtb3ZlTm9kZSgtMSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHJlbW92YWwgYXQgbmVnYXRpdmUgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0QXRFeGNlc3NpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCS8vIGFwcGVuZHMgb24gYmFkIHZhbHVlCi0JCWxpc3QuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpLCAzKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgaW5zZXJ0IGF0IG91dCBvZiBib3VuZHMgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRnJvbUV4Y2Vzc2l2ZUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QwIikpOwotCQkvLyBpZ25vcmVzIGJhZCBpbmRleAotCQlsaXN0LnJlbW92ZU5vZGUoMyk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHJlbW92YWwgYXQgbm9uZXhpc3RlbnQgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJub24temVybyBsZW5ndGggYXQgc3RhcnQiLCAwLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDEiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyIikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDIsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCAzLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlOb2RlIGVsZW1lbnQ0ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q0IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDQsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q0IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NCIsIGVsZW1lbnQ0LmdldExvY2FsTmFtZSgpKTsKLQkJCi0JCU5vZGUgZWxlbWVudDUgPSBsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDUiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgNSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDUgbm90IHJldHVybmVkIGZyb20gYXBwZW5kIiwgInRlc3Q1IiwgZWxlbWVudDUuZ2V0TG9jYWxOYW1lKCkpOwotCQkKLQkJTm9kZSBlbGVtZW50NiA9IGxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA2LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NiBub3QgcmV0dXJuZWQgZnJvbSBhcHBlbmQiLCAidGVzdDYiLCBlbGVtZW50Ni5nZXRMb2NhbE5hbWUoKSk7Ci0JCQotCQlOb2RlIGVsZW1lbnQ3ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q3IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDcsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q3IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NyIsIGVsZW1lbnQ3LmdldExvY2FsTmFtZSgpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVjZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudXRpbC5OdWxsSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRlc3RzIHBlcmZvcm1hbmNlIG1pbmltaXphdGlvbiBvZiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgZm9yIFJlZ2lvbkNoYW5nZWQKLSAqIGV2ZW50cywgd2hpY2ggd291bGQgYWZmZWN0IGFyZWFzIGxpa2UgZm9ybWF0dGluZyBwZXJmb3JtYW5jZQotICovCi1wdWJsaWMgY2xhc3MgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cygpIHsKLQkJdGhpcygiUmVnaW9uQ2hhbmdlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiB0ZXN0cyIpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kV2hpdGVzcGFjZVRvQXR0cmlidXRlTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0JCQkKLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYiA9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBcHBlbmRXaGl0ZXNwYWNlVG9FcXVhbFNpZ24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQkJCQljaGFuZ2VkWzBdID0gZXZlbnRUeXBlOwotCQkJCX0KLQkJCX07Ci0JCQkoKElOb2RlTm90aWZpZXIpIGJlZm9yZSkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9ICBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kV2hpdGVzcGFjZVRvVGFnTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDIsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhICBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFwcGVuZFdoaXRlc3BhY2VUb0F0dHJpYnV0ZVZhbHVlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjID48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VBdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTEsIC0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwcml2YXRlIGludCBlQ291bnQgPSAwOwotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgiUmVjZWl2ZWQgbW9yZSB0aGFuIDIgZXZlbnRzLiIsIGVDb3VudCA8IDIpOwotCQkJCQljaGFuZ2VkW2VDb3VudCsrXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAwLCAiZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgUmVtb3ZlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFswXSArICIgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5SRU1PVkUsIGNoYW5nZWRbMF0pOwotCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBBZGRlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFsxXSArICIgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5BREQsIGNoYW5nZWRbMV0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiZD0gYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VBdHRyaWJ1dGVWYWx1ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgImQiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgQ2hhbmdlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFswXSArICIgIiArc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCBJTm9kZU5vdGlmaWVyLkNIQU5HRSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9IGRjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0JcHVibGljIHZvaWQgdGVzdENoYW5nZVRhZ05hbWUxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDEsIDAsICJkIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydE5vdFNhbWUoIkRPTSBOb2RlIG5vdCByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoIlN0cnVjdHVyZSBDaGFuZ2VkIG5vdGlmaWNhdGlvbiBub3Qgc2VudCB0byBhZGFwdGVyICIgKyBjaGFuZ2VkWzBdICsgIiB0byBwYXJlbnQgIiArc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCBJTm9kZU5vdGlmaWVyLlNUUlVDVFVSRV9DSEFOR0VELCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGRhIGI9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VUYWdOYW1lMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgZG9jdW1lbnQpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyLCAwLCAiZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnROb3RTYW1lKCJET00gTm9kZSBub3QgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJTdHJ1Y3R1cmUgQ2hhbmdlZCBub3RpZmljYXRpb24gbm90IHNlbnQgdG8gYWRhcHRlciAiICsgY2hhbmdlZFswXSArICIgdG8gcGFyZW50ICIgK3N0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5TVFJVQ1RVUkVfQ0hBTkdFRCwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhZCBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlUXVvdGVkQXR0cmlidXRlVmFsdWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IFwiY1wiPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICJkIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBDaGFuZ2VkIEFkYXB0ZXIgTm90aWZpY2F0aW9uIGV2ZW50IG5vdCBzZW50ICIgKyBjaGFuZ2VkWzBdICsgIiAiICtzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIElOb2RlTm90aWZpZXIuQ0hBTkdFLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gXCJkY1wiPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlcGVuZFNwYWNlVG9BdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQkKLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCQotCQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQkJCQljaGFuZ2VkWzBdID0gZXZlbnRUeXBlOwotCQkJCX0KLQkJCX07Ci0JCQkoKElOb2RlTm90aWZpZXIpIGJlZm9yZSkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDMsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhICBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlcGVuZFNwYWNlVG9FcXVhbFNpZ24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYiA9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVwZW5kU3BhY2VUb0F0dHJpYnV0ZVZhbHVlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA2LCAwLCAiICIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gIGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVUcmFpbGluZ1NwYWNlRnJvbUVxdWFsU2lnbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAxLCAiIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPWM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21BdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiID0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAxLCAiIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21BdHRyaWJ1dGVWYWx1ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYiA9IGMgPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDEsICIiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGIgPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21UYWdOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSAgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCQkoKElOb2RlTm90aWZpZXIpIGRvY3VtZW50KS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMiwgMSwgIiIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21UYWdOYW1lMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDMsIDEsICIiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VUcmFpbGluZ1NwYWNlb2ZFcXVhbFNpZ25XaXRoVHdvU3BhY2VzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAwLCAiICAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9ICAgYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZDFhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IEVjbGlwc2UgRm91bmRhdGlvbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBqZXNwZXJAc2Vsc2thYmV0Lm9yZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5TdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci0KLS8qKgotICogQGRlcHJlY2F0ZWQgVXNlIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgaW5zdGVhZAotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNQTElUX01VTFRJX0FUVFJTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIlx0IjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0xFQVJfQUxMX0JMQU5LX0xJTkVTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVfV0lEVEggPSA3MjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0KLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWlmIChyZXNldFByZWZlcmVuY2VzKQotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZvcm1hdHRlZEJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYmVmb3JlTW9kZWwuc2F2ZShmb3JtYXR0ZWRCeXRlcyk7IC8vICJiZWZvcmVNb2RlbCIgc2hvdWxkIG5vdyBiZQotCQkJLy8gYWZ0ZXIgdGhlIGZvcm1hdHRlcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGFjdHVhbENvbnRlbnRzID0gbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkQ29udGVudHMgKyAiXG5BY3R1YWwgQ29udGVudHM6XG4iICsgYWN0dWFsQ29udGVudHMsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCkgewotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aChNQVhfTElORV9XSURUSCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhDTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoSU5ERU5UKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoU1BMSVRfTVVMVElfQVRUUlMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVYbWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIiwgInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTU3MTYKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIiwgInRlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVUZXh0Tm9kZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTTEZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzEwODA3NAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wiLCAidGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50aXR5Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTAyMDc2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9lbnRpdGllcy54bWwiLCAidGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlUENEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHODQ2ODgKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFByZXNlcnZlUENEQVRBQ29udGVudCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRQcmVzZXJ2ZVBDREFUQUNvbnRlbnQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIiwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUNEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTYxMzMwCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sIik7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YTIueG1sIiwgInRlc3RmaWxlcy94bWwvdXNlY2RhdGEyLWZtdC54bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3BsaXRBdHRyaWJ1dGVzRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTEzNTg0Ci0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQtbm9hbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRBbGlnbkVuZEJyYWNrZXQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LW5vYWxpZ24tZm10LnhtbCIsIGZhbHNlKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGlnbkVuZEJyYWNrZXRGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0UGFydGl0aW9uRm9ybWF0dGVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NTk2ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuTWFsZm9ybWVkVHJlZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LmVkaXRzLlRleHRFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5mb3JtYXR0ZXIuRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZm9ybWF0dGVyLlhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbDsKLQotcHVibGljIGNsYXNzIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlciBwYXJ0aXRpb25Gb3JtYXR0ZXI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlwYXJ0aXRpb25Gb3JtYXR0ZXIgPSBuZXcgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcigpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbmV3IFVSSVJlc29sdmVyKCkgewotCi0JCQkJU3RyaW5nIGZCYXNlID0gYmFzZUZpbGU7Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldEZpbGVCYXNlTG9jYXRpb24oKSB7Ci0JCQkJCXJldHVybiBmQmFzZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSkgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmksIGZCYXNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UpIHsKLQkJCQkJaW50IGxhc3RTbGFzaCA9IGJhc2VSZWZlcmVuY2UubGFzdEluZGV4T2YoIi8iKTsKLQkJCQkJaWYgKGxhc3RTbGFzaCA+IDApCi0JCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZS5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSkgKyB1cmk7Ci0JCQkJCXJldHVybiBiYXNlUmVmZXJlbmNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBTdHJpbmcgYmFzZVJlZmVyZW5jZSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBiYXNlUmVmZXJlbmNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElDb250YWluZXIgZ2V0Um9vdExvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0VVJJU3RyZWFtKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShnZXRMb2NhdGlvbkJ5VVJJKHVyaSkpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHNldEZpbGVCYXNlTG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCQkJCXRoaXMuZkJhc2UgPSBuZXdMb2NhdGlvbjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IG5ld1Byb2plY3QpIHsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgsIFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcykgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBiZWZvcmVNb2RlbCA9IG51bGwsIGFmdGVyTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJYmVmb3JlTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYmVmb3JlUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYmVmb3JlUGF0aCwgYmVmb3JlTW9kZWwpOwotCi0JCQlhZnRlck1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGFmdGVyUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYWZ0ZXJQYXRoLCBhZnRlck1vZGVsKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCi0JCQlTdHJpbmcgbm9ybWFsaXplZENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlub3JtYWxpemVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKG5vcm1hbGl6ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCW5vcm1hbGl6ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2Uobm9ybWFsaXplZENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCWRvY3VtZW50LnNldChub3JtYWxpemVkQ29udGVudHMpOwotCQkJCi0JCQlpZiAocHJlZnMgPT0gbnVsbCkKLQkJCQlwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJCVRleHRFZGl0IGVkaXQgPSBwYXJ0aXRpb25Gb3JtYXR0ZXIuZm9ybWF0KGJlZm9yZU1vZGVsLCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSwgcHJlZnMpOwotCQkJdHJ5IHsKLQkJCQllZGl0LmFwcGx5KGRvY3VtZW50KTsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRUcmVlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBhY3R1YWxDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCi0JCQkvKiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgdG8gaWdub3JlIGNyb3NzIHBsYXRmb3JtIGxpbmUgZGVsaW1pdGVyIGlzc3VlcyAqLwotCQkJZXhwZWN0ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCWV4cGVjdGVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkQ29udGVudHMsICJcciIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQuXG5FeHBlY3RlZCBDb250ZW50czpcbiIgKyBleHBlY3RlZENvbnRlbnRzICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGFjdHVhbENvbnRlbnRzLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihleHBlY3RlZENvbnRlbnRzLCBhY3R1YWxDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlWG1sKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaGl0ZXNwYWNlRm9ybWF0WFNEKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDE5NDY5OAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTE1NzE2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lVGV4dE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN1bHRzIGFyZSBkaWZmZXJlbnQgdGhhbiBvbGQgZm9ybWF0dGVyCi0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwiLCAidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0xGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMDgwNzQKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIiwgInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudGl0eUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJLy8gQlVHMTAyMDc2Ci0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIiwgInRlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVQQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUc4NDY4OAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFBDRGF0YVdoaXRlc3BhY2VTdHJhdGVneShYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMuUFJFU0VSVkUpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sIiwgcHJlZnMpOwotCi0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJcHJlZnMuc2V0UENEYXRhV2hpdGVzcGFjZVN0cmF0ZWd5KFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcy5DT0xMQVBTRSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNjEzMzAKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLWZtdC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlQ0RBVEFGb3JtYXQyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwiLCAidGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTcGxpdEF0dHJpYnV0ZXNGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQkvLyB0aGUgYmVsb3cgdGVzdHMgYXJlIHNsaWdodHkgZGlmZmVyZW50IGZyb20gb2xkIGZvcm1hdHRlciB0ZXN0Ci0JCXByZWZzLnNldEluZGVudE11bHRpcGxlQXR0cmlidXRlcyh0cnVlKTsKLQkJcHJlZnMuc2V0QWxpZ25GaW5hbEJyYWNrZXQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCIsIHByZWZzKTsKLQotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXMoZmFsc2UpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldChmYWxzZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWxpZ25FbmRCcmFja2V0Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCVUcxMTM1ODQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXMoZmFsc2UpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIiwgcHJlZnMpOwotCi0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJcHJlZnMuc2V0SW5kZW50TXVsdGlwbGVBdHRyaWJ1dGVzKHRydWUpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQteWVzYWxpZ24tbmV3Zm10LnhtbCIsIHByZWZzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlRW1wdHlDbG9zZVRhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAxOTUyNjQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRTcGFjZUJlZm9yZUVtcHR5Q2xvc2VUYWcoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbCIsIHByZWZzKTsKLQkJCi0JCXByZWZzLnNldFNwYWNlQmVmb3JlRW1wdHlDbG9zZVRhZyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgICAgLy8gQlVHMTk4Mjk3Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sIiwgInRlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLWZtdC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDIyNjgyMQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfc2hvcnRfTm9UZXh0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDI1ODUxMgotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtTm9UZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX3Nob3J0X0luYmV0d2VlblRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1JbmJldHdlZW5UZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19zaG9ydF9TYW1lTGluZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1TYW1lTGluZVRleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LWZvcm1hdGVkLnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfc2hvcnRfRXZlcnl3aGVyZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX2xvbmdfTm9UZXh0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDI1ODUxMgotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19sb25nX0luYmV0d2VlblRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUluYmV0d2VlblRleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfbG9uZ19TYW1lTGluZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX2xvbmdfRXZlcnl3aGVyZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctRXZlcnl3aGVyZVRleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RLZWVwRW1wdHlMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcga2VlcHMgZW1wdHkgbGluZXMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENsZWFyQmxhbmtMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcgY2xlYXJzIGVtcHR5IGxpbmVzCi0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRNYWxmb3JtZWRFbmRUYWcoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjIxMjc5Ci0JCS8vIFRlc3QgdGhhdCBtYWxmb3JtZWQgZW5kIHRhZ3MgZG8gbm90IGNhdXNlIGEgTlBFIGFuZCBmb3JtYXQgdGhlIGRvY3VtZW50Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoRnJhY3R1cmVkWE1MQ29udGVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjkxMzUKLQkJLy8gVGVzdCB0aGF0IHRleHQgY29udGVudCB0aGF0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgZG9jdW1lbnQgcmVnaW9ucyBkb2VzIG5vdCBzdG9wIHRoZSBmb3JtYXR0ZXIKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLTIyOTEzNS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdENvbW1lbnRzSm9pbkxpbmVzRGlzYWJsZWQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldEpvaW5Db21tZW50TGluZXMoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0Q29tbWVudHNEaXNhYmxlZCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Rm9ybWF0Q29tbWVudFRleHQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1jb21tZW50cy1kaXNhYmxlZC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLWZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdERvY3VtZW50TGV2ZWxDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRKb2luQ29tbWVudExpbmVzKGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0RG9jdW1lbnRMZXZlbFNob3J0Q29tbWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LWZtdC54bWwiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyZTY1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08IURPQ1RZUEUgZG9jdW1lbnQgWwotPCFFTlRJVFkgRUlJICI8ZW1waD5lbGVtZW50IGluZm9ybWF0aW9uIGl0ZW08L2VtcGg+Ij4KLV0+Ci08ZG9jdW1lbnQ+Ci0JVGhpcyBkb2N1bWVudCBjb250YWlucyBubyBjaGlsZAotCSZFSUk7cy4gSXQgZG9lcyBjb250YWluIGEgbm9uJkVJSTsuCi08L2RvY3VtZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWM4MDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBbCi08IUVOVElUWSBFSUkgIjxlbXBoPmVsZW1lbnQgaW5mb3JtYXRpb24gaXRlbTwvZW1waD4iPgotXT4KLTxkb2N1bWVudD4KLQlUaGlzIGRvY3VtZW50IGNvbnRhaW5zIG5vIGNoaWxkICZFSUk7cy4KLQlJdCBkb2VzIGNvbnRhaW4gYSBub24mRUlJOy4gCi08L2RvY3VtZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViZGVkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBbCi08IUVOVElUWSBFSUkgIjxlbXBoPmVsZW1lbnQgaW5mb3JtYXRpb24gaXRlbTwvZW1waD4iPgotXT4KLTxkb2N1bWVudD4KLVRoaXMgZG9jdW1lbnQgY29udGFpbnMgbm8gY2hpbGQgJkVJSTtzLiBJdCBkb2VzIGNvbnRhaW4gYSBub24mRUlJOy4KLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQtbm9hbGlnbi1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQtbm9hbGlnbi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDEzOTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LW5vYWxpZ24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPgotCTwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPgotCQl5ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKLQk8L2xpa2U+Ci0JPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTg5N2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseSByYWQ9ImR1ZGUiIGludGVuc2U9Im1hbiIgY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT4KLQk8L3RvdGFsbHk+Ci0JPGxpa2UgZmVyPSJzdXJlIiBubz0id2F5Ij4KLQkJeWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlCi0JPC9saWtlPgotCTxzZXJpb3VzbHkgbm89Impva2UiIGZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQteWVzYWxpZ24tbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlNmIyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseSByYWQ9ImR1ZGUiIGludGVuc2U9Im1hbiIgY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT48L3RvdGFsbHk+Ci0JPGxpa2UgZmVyPSJzdXJlIiBubz0id2F5Ij55ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUKLQkJd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU8L2xpa2U+Ci0JPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC1ub2FsaWduLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQtbm9hbGlnbi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzU3NTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC1ub2FsaWduLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseQotCQlyYWQ9ImR1ZGUiCi0JCWludGVuc2U9Im1hbiIKLQkJY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIj4KLQk8L3RvdGFsbHk+Ci0JPGxpa2UKLQkJZmVyPSJzdXJlIgotCQlubz0id2F5Ij4KLQkJeWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlCi0JPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQteWVzYWxpZ24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2JlOTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkKLQkJcmFkPSJkdWRlIgotCQlpbnRlbnNlPSJtYW4iCi0JCWNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIKLQk+Ci0JPC90b3RhbGx5PgotCTxsaWtlCi0JCWZlcj0ic3VyZSIKLQkJbm89IndheSIKLQk+Ci0JCXllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZSB3aGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQotCTwvbGlrZT4KLQk8c2VyaW91c2x5Ci0JCW5vPSJqb2tlIgotCQlmb3I9InJlYWxzIgotCS8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQteWVzYWxpZ24tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBkMjZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkKLQkJcmFkPSJkdWRlIgotCQlpbnRlbnNlPSJtYW4iCi0JCWNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIKLQk+PC90b3RhbGx5PgotCTxsaWtlCi0JCWZlcj0ic3VyZSIKLQkJbm89IndheSIKLQk+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlOWI0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIgc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPjwvdG90YWxseT4KLTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlPC9saWtlPgotPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLW5vc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGNhMzlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPjwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPnllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZTwvbGlrZT4KLQk8c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi15ZXNzcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyNjc2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5Ci0JCXJhZD0iZHVkZSIKLQkJaW50ZW5zZT0ibWFuIgotCQljcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPjwvdG90YWxseT4KLQk8bGlrZQotCQlmZXI9InN1cmUiCi0JCW5vPSJ3YXkiPnllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZTwvbGlrZT4KLQk8c2VyaW91c2x5Ci0JCW5vPSJqb2tlIgotCQlmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZGVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci08dG90YWxseSByYWQ9ImR1ZGUiIGludGVuc2U9Im1hbiIgY3Jhenk9ImFuZCBpbnNhbmUiIHNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIj48L3RvdGFsbHk+Ci08bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPnllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZTwvbGlrZT4KLTxzZXJpb3VzbHkgbm89Impva2UiIGZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYWExOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZT4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48b25lPjx0d28+PC90d28+PHRocmVlPjxmb3VyPjwvZm91cj48L3RocmVlPjwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MDk1NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b25lIGF0dHI9IjEiIGF0dHIyPSIyIj4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDBkZjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZSBhdHRyPSIxIiBhdHRyMj0iMiI+Ci0JPHR3bz48L3R3bz4KLQk8dGhyZWU+Ci0JCTxmb3VyPgotCQk8L2ZvdXI+Ci0JPC90aHJlZT4KLTwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTEzZjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjxvbmUgYXR0cj0iMSIJCWF0dHIyPSIyIj4JCTx0d28+PC90d28+PHRocmVlPjxmb3VyPgkJPC9mb3VyPjwvdGhyZWU+PC9vbmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyOGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08dGVzdGRvYz48P3Rlc3RpbmcgdGVzdD0ieWF5Ij8+Ci08L3Rlc3Rkb2M+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyOGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0ZG9jPjw/dGVzdGluZyB0ZXN0PSJ5YXkiPz4KLTwvdGVzdGRvYz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWJiNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0Ci0KLQlvZiB0aGUgZm9ybWF0dGVyCi0KLQl3aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0KLQkJPGNkYXRhPgotCQkJPCFbQ0RBVEFbCi0gICBEYWEsIGRhYSwgZGEsIGRhIC0gZGEsIGRhIC0gZGEsIGRhCi0JCi0JCUNhbid0IHRvdWNoIHRoaXMhCi0gIChzcGFjZXMgaGVyZSkKLQkodGFiIGhlcmUpCi0JCV1dPgotCQk8L2NkYXRhPgotCQk8YT4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YjwvYj48IS0tIENvbW1lbnQgaGVyZSAgZG9uJ3QgdHdpZGRsZSB3aXRoIHNwYWNlcyBpbiB0aGVtIC0tPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+Ci0JCTw/dGFyZ2V0ICB3aHkgIGFtICBJICBoZXJlIAotICA/PgotCTwvZGF0YS1zdHVmZj4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjJhODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0IG9mIHRoZSBmb3JtYXR0ZXIgd2hpY2ggc2hvdWxkIGJlIGVhc3kgdG8KLQlwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0JCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JCTwvY2RhdGE+Ci0JCTxhPgotCQkJPGI+YjwvYj4KLQkJCTxiPmIgPC9iPgotCQkJPGI+IGI8L2I+ICA8IS0tIENvbW1lbnQgaGVyZSBkb24ndCB0d2lkZGxlIHdpdGggc3BhY2VzIGluIHRoZW0gLS0+Ci0JCQk8Yj4gYiA8L2I+Ci0JCQk8Yj4gYiA8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci0JPC9kYXRhLXN0dWZmPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZWYzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotICAgICBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgdGVzdAotICAKLSAgIG9mIHRoZSBmb3JtYXR0ZXIKLSAgCi13aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJyBhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIiBhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIgYXR0cjM9InNob3J0LXZhbHVlIgotICA+Ci0gIAotCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JPC9jZGF0YT4KLQk8YT4KLQk8Yj5iPC9iPgotCTxiPmIgPC9iPgotCTxiPiBiPC9iPiAgPCEtLSBDb21tZW50IGhlcmUgIGRvbid0IHR3aWRkbGUgd2l0aCBzcGFjZXMgaW4gdGhlbSAtLT4gICAgICAJPGI+IGIgPC9iPgotCTxiPgotCWIKLQk8L2I+Ci0JPGI+YjwvYj4KLQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci08L2RhdGEtc3R1ZmY+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjE3YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdGFnc3dpdGhlbXB0eWNvbnRlbnQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRUxFTUVOVCB0b3Btb3N0IChlbXB0eSxlbXB0eXdpdGhhdHRyaWJ1dGUpPgotPCFFTEVNRU5UIGVtcHR5IEVNUFRZPgotPCFFTEVNRU5UIGVtcHR5d2l0aGF0dHJpYnV0ZSBFTVBUWT4KLTwhQVRUTElTVCBlbXB0eXdpdGhhdHRyaWJ1dGUKLQlteWF0dHJpYnV0ZTEgQ0RBVEEgI0lNUExJRUQKLQlteWF0dHJpYnV0ZTIgQ0RBVEEgI0lNUExJRUQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZlNDNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08bWFueXRhZ3M+Ci0JPHNvbWV0YWcgc29tZWF0dHI9InNvbWVhdHRydmFsdWUiPjwhW0NEQVRBWwotICBibGFoIGJsYWggYmxhaCAKLSAgCQkJbm90aGluZwotICAJY2hhbmdlcwotICBpbgotaGVyZQotXV0+PC9zb21ldGFnPgotPC9tYW55dGFncz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzE3NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFueXRhZ3M+CTxzb21ldGFnIHNvbWVhdHRyPSJzb21lYXR0cnZhbHVlIj48IVtDREFUQVsKLSAgYmxhaCBibGFoIGJsYWggCi0gIAkJCW5vdGhpbmcKLSAgCWNoYW5nZXMKLSAgaW4KLWhlcmUKLV1dPjwvc29tZXRhZz4KLTwvbWFueXRhZ3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEyLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0YTNhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxzY3JpcHQ+Ci0Jbm9zcGFjZWJldHdlZW5tZWFuZGNkYXRhPCFbQ0RBVEFbCi1mdW5jdGlvbiBtYXRjaHdvKGEsYikKLXsKLWlmIChhIDwgYiAmJiBhIDwgMCkgdGhlbgotICAgewotICAgcmV0dXJuIDEKLSAgIH0KLWVsc2UKLSAgIHsKLSAgIHJldHVybiAwCi0gICB9Ci19Ci1dXT5ub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGEKLTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI0ZWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08c2NyaXB0Pgotbm9zcGFjZWJldHdlZW5tZWFuZGNkYXRhPCFbQ0RBVEFbCi1mdW5jdGlvbiBtYXRjaHdvKGEsYikKLXsKLWlmIChhIDwgYiAmJiBhIDwgMCkgdGhlbgotICAgewotICAgcmV0dXJuIDEKLSAgIH0KLWVsc2UKLSAgIHsKLSAgIHJldHVybiAwCi0gICB9Ci19Ci1dXT5ub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGEKLTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWMyZWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgdG9wbW9zdCBTWVNURU0gInRhZ3N3aXRoZW1wdHljb250ZW50LmR0ZCIgPgotPHRvcG1vc3Q+Ci0JPGVtcHR5PjwvZW1wdHk+Ci0JPGVtcHR5d2l0aGF0dHJpYnV0ZQotCQlteWF0dHJpYnV0ZTE9IiIKLQkJbXlhdHRyaWJ1dGUyPSIiPjwvZW1wdHl3aXRoYXR0cmlidXRlPgotPC90b3Btb3N0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5OWNkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgdG9wbW9zdCBTWVNURU0gInRhZ3N3aXRoZW1wdHljb250ZW50LmR0ZCIgPgotPHRvcG1vc3Q+Ci0gIDxlbXB0eT48L2VtcHR5PgotICA8ZW1wdHl3aXRoYXR0cmlidXRlIG15YXR0cmlidXRlMT0iIiBteWF0dHJpYnV0ZTI9IiI+PC9lbXB0eXdpdGhhdHRyaWJ1dGU+Ci08L3RvcG1vc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJmYzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsaWJyYXJ5PgotCTxib29rcz4KLQkJPGJvb2s+Ci0JCQk8dGl0bGU+VGl0bGU8L3RpdGxlPgotCQkJPGF1dGhvcj5BdXRob3I8L2F1dGhvcj4KLQkJPC9ib29rIAotCTwvYm9va3M+Ci08L2xpYnJhcnk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzMGIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsaWJyYXJ5PgotPGJvb2tzPgotPGJvb2s+Ci08dGl0bGU+VGl0bGU8L3RpdGxlPgotPGF1dGhvcj5BdXRob3I8L2F1dGhvcj4KLQk8L2Jvb2sgPC9ib29rcz4KLTwvbGlicmFyeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YTU3MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyOTEzNS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxib29rPgotCTx0aXRsZT5UaGlzICZhbXA7IFRoYXQ8L3RpdGxlPgotCTxhdXRob3I+U29tZSBwZXJzb248L2F1dGhvcj4KLQk8cmV2aWV3cz4KLQkJPHJldmlldyBpZD0iMCI+ICZxdW90O0Egd29uZGVyZnVsIGFuZCBncmlwcGluZyBlcGljIHN0b3J5LiZxdW90OyA8L3Jldmlldz4KLQkJPHJldmlldyBpZD0iMSI+JnF1b3Q7SSBsaWtlZCBpdC4mcXVvdDs8L3Jldmlldz4KLQk8L3Jldmlld3M+Ci0JPHByZXZpZXc+IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LjwvcHJldmlldz4KLQk8cmVsZWFzZURhdGU+Ci0JCTxwYXR0ZXJuPiV5eXl5LSVtbS0lZGQ8L3BhdHRlcm4+Ci0JCTxkYXRlPjIwMDktMDQtMTM8L2RhdGU+Ci0JPC9yZWxlYXNlRGF0ZT4KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyOTEzNS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWZhMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyOTEzNS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGJvb2s+Ci0JPHRpdGxlPlRoaXMgJmFtcDsgVGhhdDwvdGl0bGU+Ci08YXV0aG9yPlNvbWUgcGVyc29uPC9hdXRob3I+Ci08cmV2aWV3cz4KLQkJCTxyZXZpZXcgaWQ9IjAiPiAmcXVvdDtBIHdvbmRlcmZ1bCBhbmQgZ3JpcHBpbmcgZXBpYyBzdG9yeS4mcXVvdDsgPC9yZXZpZXc+Ci08cmV2aWV3IGlkPSIxIj4mcXVvdDtJIGxpa2VkIGl0LiZxdW90OzwvcmV2aWV3PgotPC9yZXZpZXdzPgotCQkJPHByZXZpZXc+IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LjwvcHJldmlldz4KLQkJCTxyZWxlYXNlRGF0ZT4KLTxwYXR0ZXJuPiV5eXl5LSVtbS0lZGQ8L3BhdHRlcm4+Ci08ZGF0ZT4yMDA5LTA0LTEzPC9kYXRlPgotCQkJPC9yZWxlYXNlRGF0ZT4KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jbGVhci1ibGFuay1saW5lcy1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhODE3YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0JPCEtLSBDb21tZW50IG5vZGUgLS0+Ci0JPG5vY29udGVudD48L25vY29udGVudD4KLQk8bWl4ZWRjb250ZW50PgotCQlUZXh0bm9kZSB3aXRoIHNvbWUgdHJhaWxpbmcgd2hpdGVzcGFjZSAtIHNob3VsZCBiZSBjb2xsYXBzZWQgYW5kIHNvbWUKLQkJb2YgdGhlIHRleHQgc2hvdWxkIGJlIHdyYXBwZWQKLQkJPG1peGVkPkFsbCB0ZXh0PC9taXhlZD4KLQk8L21peGVkY29udGVudD4KLQk8bm9jb250ZW50PgotCTwvbm9jb250ZW50PgotCTxzb21lbW9yZW5vY29udGVudD4KLQkJPGluZGVudG1vcmU+Ci0JCQk8ZXZlbm1vcmU+Ci0JCQk8L2V2ZW5tb3JlPgotCQk8L2luZGVudG1vcmU+Ci0JPC9zb21lbW9yZW5vY29udGVudD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctRXZlcnl3aGVyZVRleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTgzZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQl0ZXN0Ci0KLQl0ZXN0PCEtLSBjb21tZW50IDE2IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCXRlc3QKLQotCXRlc3QJPCEtLSBjb21tZW50IDE3IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCXRlc3QKLQotCXRlc3QgPCEtLSBjb21tZW50IDE4IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCXRlc3QKLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctRXZlcnl3aGVyZVRleHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMDk1ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0JCi10ZXN0Ci0JCQkKLXRlc3Q8IS0tIGNvbW1lbnQgMTYgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0KLQkJCQl0ZXN0Ci0KLQl0ZXN0CTwhLS0gY29tbWVudCAxNyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkKLQl0ZXN0Ci0JCQkJCi0JCQl0ZXN0IDwhLS0gY29tbWVudCAxOCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotdGVzdAotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctSW5iZXR3ZWVuVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYjMxYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCi0JdGVzdAotCTwhLS0gY29tbWVudCA2IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQl0ZXN0Ci0JPCEtLSBjb21tZW50IDcgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCXRlc3QKLQk8IS0tIGNvbW1lbnQgOCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0KLQl0ZXN0Ci0KLQotCTwhLS0gY29tbWVudCA5IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCXRlc3QKLQotCi0JPCEtLSBjb21tZW50IDEwIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCi0JdGVzdAotCi0JPCEtLSBjb21tZW50IDEyIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctSW5iZXR3ZWVuVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUluYmV0d2VlblRleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjc2M2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctSW5iZXR3ZWVuVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQkJCQotdGVzdAotPCEtLSBjb21tZW50IDYgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci10ZXN0Ci0JPCEtLSBjb21tZW50IDcgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci10ZXN0Ci0JCQk8IS0tIGNvbW1lbnQgOCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkJCQotdGVzdAotCi0KLTwhLS0gY29tbWVudCA5IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JdGVzdAotCi0KLQk8IS0tIGNvbW1lbnQgMTAgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JCi0JCi0JCQkJdGVzdAotCi0JCQk8IS0tIGNvbW1lbnQgMTIgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JCQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctTm9UZXh0LWZvcm1hdGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctTm9UZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3NzU5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLU5vVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQk8IS0tIGNvbW1lbnQgMCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JPCEtLSBjb21tZW50IDEgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCTwhLS0gY29tbWVudCAyIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCTwhLS0gY29tbWVudCAzIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCTwhLS0gY29tbWVudCA0IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCTwhLS0gY29tbWVudCA1IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWIxNjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctTm9UZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotPCEtLSBjb21tZW50IDAgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JPCEtLSBjb21tZW50IDEgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JCQk8IS0tIGNvbW1lbnQgMiBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotPCEtLSBjb21tZW50IDMgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0KLQk8IS0tIGNvbW1lbnQgNCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCQkJPCEtLSBjb21tZW50IDUgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JCQotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1TYW1lTGluZVRleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1TYW1lTGluZVRleHQtZm9ybWF0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmIzMGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctU2FtZUxpbmVUZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCi0JdGVzdDwhLS0gY29tbWVudCAxMyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JdGVzdAk8IS0tIGNvbW1lbnQgMTQgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCXRlc3QgPCEtLSBjb21tZW50IDE1IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctU2FtZUxpbmVUZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctU2FtZUxpbmVUZXh0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZlMGNkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQkJCi0JCQotdGVzdDwhLS0gY29tbWVudCAxMyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQl0ZXN0CTwhLS0gY29tbWVudCAxNCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkJCXRlc3QgPCEtLSBjb21tZW50IDE1IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZGEzMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bm9kZT4KLQk8aW5uZXI+Ci0JCTxhbm90aGVyPgotCQkJPGVsc2U+IDwhLS0gRG9uJ3Qgd3JhcCAtLT4KLQkJCTwvZWxzZT48IS0tIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiAKLQkJCQlNYWVjZW5hcyBlbGl0IGVzdCwgY29udmFsbGlzIGlkLCBjb25ndWUgaW4sIHBvc3VlcmUgZXQsIG51bmMuIFNlZCB1dCBsZWN0dXMuIAotCQkJCU51bGxhIGV1IGRpYW0gYWMgbnVsbGEgcGxhY2VyYXQgdGluY2lkdW50LiBJbiB2aXRhZSB0ZWxsdXMuIFN1c3BlbmRpc3NlIHJ1dHJ1bS4gCi0JCQkJTnVuYyBtb2xsaXMgdXJuYSBhdCBtYXVyaXMgc3VzY2lwaXQgbGFjaW5pYS4gUHJhZXNlbnQgaW4gYW50ZS4gTWFlY2VuYXMgdGluY2lkdW50IAotCQkJCW1hdXJpcyBzIC0tPgotCQkJU29tZXRleHQgc3R1ZmYgaW4gdGhlIGRvY3VtZW50Ci0JCQk8c29tZXRoaW5nPgotCQkJCTxlbHNlIHhtbDpzcGFjZT0icHJlc2VydmUiPjwhLS0JTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzCQllbGl0IGVzdCwgY29udmFsbGlzIGlkLCBjb25ndWUgaW4sIHBvc3VlcmUgZXQsIG51bmMuIFNlZCB1dCBsZWN0dXMuCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4JCQkJU3VzcGVuZGlzc2UgcnV0cnVtLiBOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMtLT48L2Vsc2U+Ci0JCQk8L3NvbWV0aGluZz4KLQkJPC9hbm90aGVyPgotCTwvaW5uZXI+Ci08L25vZGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NDVhZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtRXZlcnl3aGVyZVRleHQtZm9ybWF0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0JdGVzdAotCi0JdGVzdDwhLS0gY29tbWVudCAxNiAtLT4KLQotCXRlc3QKLQotCXRlc3QJPCEtLSBjb21tZW50IDE3IC0tPgotCi0JdGVzdAotCi0JdGVzdCA8IS0tIGNvbW1lbnQgMTggLS0+Ci0KLQl0ZXN0Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODU1MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtRXZlcnl3aGVyZVRleHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCQotdGVzdAotCQkJCi10ZXN0PCEtLSBjb21tZW50IDE2IC0tPgotCi0JCQkJdGVzdAotCi0JdGVzdAk8IS0tIGNvbW1lbnQgMTcgLS0+Ci0JCi0JdGVzdAotCQkJCQotCQkJdGVzdCA8IS0tIGNvbW1lbnQgMTggLS0+Ci0KLXRlc3QKLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtSW5iZXR3ZWVuVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YTQ5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtSW5iZXR3ZWVuVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQotCXRlc3QKLQk8IS0tIGNvbW1lbnQgNiAtLT4KLQl0ZXN0Ci0JPCEtLSBjb21tZW50IDcgLS0+Ci0JdGVzdAotCTwhLS0gY29tbWVudCA4IC0tPgotCi0JdGVzdAotCi0KLQk8IS0tIGNvbW1lbnQgOSAtLT4KLQotCXRlc3QKLQotCi0JPCEtLSBjb21tZW50IDEwIC0tPgotCi0KLQl0ZXN0Ci0KLQk8IS0tIGNvbW1lbnQgMTIgLS0+Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1JbmJldHdlZW5UZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IwYWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0JCQkKLXRlc3QKLTwhLS0gY29tbWVudCA2IC0tPgotdGVzdAotCTwhLS0gY29tbWVudCA3IC0tPgotdGVzdAotCQkJPCEtLSBjb21tZW50IDggLS0+Ci0JCQkKLXRlc3QKLQotCi08IS0tIGNvbW1lbnQgOSAtLT4KLQotCXRlc3QKLQotCi0JPCEtLSBjb21tZW50IDEwIC0tPgotCQotCQotCQkJCXRlc3QKLQotCQkJPCEtLSBjb21tZW50IDEyIC0tPgotCQkKLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1Ob1RleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtTm9UZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmYjQ0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1Ob1RleHQtZm9ybWF0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0JPCEtLSBjb21tZW50IDAgLS0+Ci0JPCEtLSBjb21tZW50IDEgLS0+Ci0JPCEtLSBjb21tZW50IDIgLS0+Ci0KLQk8IS0tIGNvbW1lbnQgMyAtLT4KLQotCTwhLS0gY29tbWVudCA0IC0tPgotCi0JPCEtLSBjb21tZW50IDUgLS0+Ci0KLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1Ob1RleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGIyZTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLTwhLS0gY29tbWVudCAwIC0tPgotCTwhLS0gY29tbWVudCAxIC0tPgotCQkJPCEtLSBjb21tZW50IDIgLS0+Ci0KLTwhLS0gY29tbWVudCAzIC0tPgotCi0JPCEtLSBjb21tZW50IDQgLS0+Ci0KLQkJCTwhLS0gY29tbWVudCA1IC0tPgotCQkKLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1TYW1lTGluZVRleHQtZm9ybWF0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzk2YzNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCi0JdGVzdDwhLS0gY29tbWVudCAxMyAtLT4KLQl0ZXN0CTwhLS0gY29tbWVudCAxNCAtLT4KLQl0ZXN0IDwhLS0gY29tbWVudCAxNSAtLT4KLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1TYW1lTGluZVRleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTcwY2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQkJCi0JCQotdGVzdDwhLS0gY29tbWVudCAxMyAtLT4KLQl0ZXN0CTwhLS0gY29tbWVudCAxNCAtLT4KLQkJCXRlc3QgPCEtLSBjb21tZW50IDE1IC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZlYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bm9kZT4KLQk8aW5uZXI+Ci0JCTxhbm90aGVyPgotCQkJPGVsc2U+IDwhLS0gRG9uJ3Qgd3JhcCAtLT4KLQkJCTwvZWxzZT48IS0tCQkJCUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBNYWVjZW5hcwkJCQllbGl0IGVzdCwgY29udmFsbGlzIGlkLCBjb25ndWUgaW4sIHBvc3VlcmUgZXQsIG51bmMuIFNlZCB1dCBsZWN0dXMuCQkJCU51bGxhIGV1IGRpYW0gYWMgbnVsbGEgcGxhY2VyYXQgdGluY2lkdW50LiBJbiB2aXRhZSB0ZWxsdXMuCQkJCVN1c3BlbmRpc3NlIHJ1dHJ1bS4gTnVuYyBtb2xsaXMgdXJuYSBhdCBtYXVyaXMgc3VzY2lwaXQgbGFjaW5pYS4gUHJhZXNlbnQgaW4gYW50ZS4gTWFlY2VuYXMgdGluY2lkdW50IG1hdXJpcyBzLS0+Ci0JCQlTb21ldGV4dCBzdHVmZiBpbiB0aGUgZG9jdW1lbnQKLQk8c29tZXRoaW5nPgotCQkJCTxlbHNlIHhtbDpzcGFjZT0icHJlc2VydmUiPjwhLS0JTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzCQllbGl0IGVzdCwgY29udmFsbGlzIGlkLCBjb25ndWUgaW4sIHBvc3VlcmUgZXQsIG51bmMuIFNlZCB1dCBsZWN0dXMuCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4JCQkJU3VzcGVuZGlzc2UgcnV0cnVtLiBOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMtLT48L2Vsc2U+Ci0JPC9zb21ldGhpbmc+Ci0JCTwvYW5vdGhlcj4KLQk8L2lubmVyPgotPC9ub2RlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjlhZmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYWluPgotCTxhIHRhZz0id2l0aCI+IFNvbWUgY29udGVudCA8L2E+Ci0JPG5vY29udGVudHdpdGhzcGFjZSAvPgotCTxub2NvbnRlbnR3aXRob3V0c3BhY2UgLz4KLQk8bm9jb250ZW50IHdpdGhhdHRyPSJzdHVmZiIgLz4KLQk8bm9jb250ZW50IC8+Ci0JPG1hbnlsaW5lZGNvbnRlbnQgd2l0aD0iYXR0cmlidXRlcyIgLz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2Utbm9uZS1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1ub25lLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZTYxZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1ub25lLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bWFpbj4KLQk8YSB0YWc9IndpdGgiPiBTb21lIGNvbnRlbnQgPC9hPgotCTxub2NvbnRlbnR3aXRoc3BhY2UvPgotCTxub2NvbnRlbnR3aXRob3V0c3BhY2UvPgotCTxub2NvbnRlbnQgd2l0aGF0dHI9InN0dWZmIi8+Ci0JPG5vY29udGVudC8+Ci0JPG1hbnlsaW5lZGNvbnRlbnQgd2l0aD0iYXR0cmlidXRlcyIvPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmYWZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bWFpbj4KLQk8YSB0YWc9IndpdGgiPiBTb21lIGNvbnRlbnQgPC9hPgotCTxub2NvbnRlbnR3aXRoc3BhY2UgLz4KLQk8bm9jb250ZW50d2l0aG91dHNwYWNlLz4KLQk8bm9jb250ZW50IHdpdGhhdHRyPSJzdHVmZiIvPgotCTxub2NvbnRlbnQgICAgCQkvPgotCTxtYW55bGluZWRjb250ZW50IAotCQotCQl3aXRoPSJhdHRyaWJ1dGVzIgotCQkJLz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtY29tbWVudHMtZGlzYWJsZWQtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtY29tbWVudHMtZGlzYWJsZWQtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlNzA5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQk8IS0tIAotCQlUaGlzIGlzIG15IG5vZGUgaGVhZGVyLgotCS0tPgotCTxub2RlPgotCQlUZXh0Ci0JPC9ub2RlPgotCi08IS0tIFRoaXMgaXMgbXkgbm9kZSBmb290ZXIuIFRoZSB0ZXh0IHNob3VsZCBiZSBhIGxpdHRsZSB0b28gbG9uZyBmb3IgdGhlIGxpbmUsIGJ1dCB0aGF0J3Mgb2suIEp1c3QgbWFrZSBzdXJlIGl0J3Mgbm90IGZvcm1hdHRlZC4gLS0+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1jb21tZW50cy1kaXNhYmxlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlNzA5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCTwhLS0gCi0JCVRoaXMgaXMgbXkgbm9kZSBoZWFkZXIuCi0JLS0+Ci0JPG5vZGU+Ci0JCVRleHQKLQk8L25vZGU+Ci0KLTwhLS0gVGhpcyBpcyBteSBub2RlIGZvb3Rlci4gVGhlIHRleHQgc2hvdWxkIGJlIGEgbGl0dGxlIHRvbyBsb25nIGZvciB0aGUgbGluZSwgYnV0IHRoYXQncyBvay4gSnVzdCBtYWtlIHN1cmUgaXQncyBub3QgZm9ybWF0dGVkLiAtLT4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTUxODlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLQlUaGlzIGlzIG15IGRvY3VtZW50LQotCWxldmVsIGNvbW1lbnQuCi0JRm9ybWF0IHRoZSByZXN0LCBidXQgZG8gbm90IGluZGVudCBtZSBhbnkgZnVydGhlci4KLS0tPgotPHJvb3Q+Ci0JPGxlYWY+PC9sZWFmPgotCTxsZWFmPjwvbGVhZj4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1jb21tZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjZjEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLQlUaGlzIGlzIG15IGRvY3VtZW50LQotCWxldmVsIGNvbW1lbnQuCi0JRm9ybWF0IHRoZSByZXN0LCBidXQgZG8gbm90IGluZGVudCBtZSBhbnkgZnVydGhlci4gCi0tLT4KLTxyb290PgotPGxlYWY+PC9sZWFmPgotPGxlYWY+PC9sZWFmPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtc2hvcnQtY29tbWVudC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYzVjN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIFRlc3RmaWxlLiBEb24ndCBpbmRlbnQgdGhpcyBjb21tZW50LiAtLT4KLTxyb290PgotCTx0ZXN0PjwvdGVzdD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJhZDg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBUZXN0ZmlsZS4gRG9uJ3QgaW5kZW50IHRoaXMgY29tbWVudC4gLS0+Ci08cm9vdD4KLTx0ZXN0PjwvdGVzdD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtam9pbi1saW5lcy1kaXNhYmxlZC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlYWFhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtam9pbi1saW5lcy1kaXNhYmxlZC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0JPCEtLQotCQlNeSBoZWFkZXIgY29tbWVudC4gVGhpcyBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQsIGJ1dAotCQl0aGUgZm9ybWF0dGluZyBvZiB0aGlzIGhlYWRlciBjb21tZW50Ci0JCXNob3VsZCBzdGF5IHRoZSBzYW1lLgotCS0tPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1qb2luLWxpbmVzLWRpc2FibGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1qb2luLWxpbmVzLWRpc2FibGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2NzAxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtam9pbi1saW5lcy1kaXNhYmxlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLTwhLS0gCi0JTXkgaGVhZGVyIGNvbW1lbnQuIFRoaXMgZmlsZSBzaG91bGQgYmUgZm9ybWF0dGVkLCBidXQKLQl0aGUgZm9ybWF0dGluZyBvZiB0aGlzIGhlYWRlciBjb21tZW50Ci0Jc2hvdWxkIHN0YXkgdGhlIHNhbWUuCi0tLT4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkNWFmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0JPCEtLSBDb21tZW50IG5vZGUgLS0+Ci0KLQk8bm9jb250ZW50Pjwvbm9jb250ZW50PgotCi0JPG1peGVkY29udGVudD4KLQkJVGV4dG5vZGUgd2l0aCBzb21lIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSBzaG91bGQgYmUKLQotCQljb2xsYXBzZWQgYW5kIHNvbWUgb2YgdGhlIHRleHQgc2hvdWxkIGJlIHdyYXBwZWQKLQotCQk8bWl4ZWQ+QWxsIHRleHQ8L21peGVkPgotCi0JPC9taXhlZGNvbnRlbnQ+Ci0KLQotCi0KLQk8bm9jb250ZW50PgotCTwvbm9jb250ZW50PgotCi0JPHNvbWVtb3Jlbm9jb250ZW50PgotCQk8aW5kZW50bW9yZT4KLQkJCTxldmVubW9yZT4KLQotCQkJPC9ldmVubW9yZT4KLQkJPC9pbmRlbnRtb3JlPgotCTwvc29tZW1vcmVub2NvbnRlbnQ+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Y2FkMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQkJPHJvb3Q+Ci0JCQotCQk8IS0tIENvbW1lbnQgbm9kZSAtLT4KLQkJCi0JCQkJCTxub2NvbnRlbnQ+PC9ub2NvbnRlbnQ+Ci0JCQotPG1peGVkY29udGVudD4KLVRleHRub2RlIHdpdGggCQkJc29tZSB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gc2hvdWxkIGJlCi0KLWNvbGxhcHNlZCBhbmQgc29tZSBvZiB0aGUgdGV4dCBzaG91bGQgYmUgd3JhcHBlZAotCi0JCQk8bWl4ZWQ+QWxsIHRleHQ8L21peGVkPgotCi08L21peGVkY29udGVudD4KLQotCi0KLQotCQk8bm9jb250ZW50PgkJCTwvbm9jb250ZW50PgotCQkKLQkJCQk8c29tZW1vcmVub2NvbnRlbnQ+Ci0JCQkJCTxpbmRlbnRtb3JlPgkJCTxldmVubW9yZT4KLQkJCQkJCi0JCQkJCTwvZXZlbm1vcmU+Ci0JCTwvaW5kZW50bW9yZT4KLQkJCQkJCQkJCTwvc29tZW1vcmVub2NvbnRlbnQ+Ci0JPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2ODNmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotCTxpaGF2ZXBjZGF0YT5pIGhhdmUgcGNkYXRhPC9paGF2ZXBjZGF0YT4KLQk8aWhhdmVwY2RhdGE+Ci0JCWkgaGF2ZQotCi0KLQotCQlzcGFjZXMKLQk8L2loYXZlcGNkYXRhPgotCTxpZG9udCAvPgotCTxuZWl0aGVyZG9pPmRvIGkgaGF2ZSBwY2RhdGE/IGknbSBub3Qgc3VyZS4gYm9vIGhvby48L25laXRoZXJkb2k+Ci08L3BjZGF0YWxpY2lvdXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZhZmY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBjZGF0YWxpY2lvdXMgU1lTVEVNICJ4bWwtcHJlc2VydmVwY2RhdGEuZHRkIiA+Ci08cGNkYXRhbGljaW91cz4KLQk8aWhhdmVwY2RhdGE+aSBoYXZlIHBjZGF0YTwvaWhhdmVwY2RhdGE+Ci0JPGloYXZlcGNkYXRhPiBpIGhhdmUgc3BhY2VzIDwvaWhhdmVwY2RhdGE+Ci0JPGlkb250IC8+Ci0JPG5laXRoZXJkb2k+ZG8gaSBoYXZlIHBjZGF0YT8gaSdtIG5vdCBzdXJlLiBib28gaG9vLjwvbmVpdGhlcmRvaT4KLTwvcGNkYXRhbGljaW91cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMDljOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwY2RhdGFsaWNpb3VzIFNZU1RFTSAieG1sLXByZXNlcnZlcGNkYXRhLmR0ZCIgPgotPHBjZGF0YWxpY2lvdXM+Ci0JPGloYXZlcGNkYXRhPmkgaGF2ZSAgICAgIHBjZGF0YTwvaWhhdmVwY2RhdGE+Ci0JPGloYXZlcGNkYXRhPiAgIGkgaGF2ZSAgCi0gIAotICAKLSAgCi0gICAgICBzcGFjZXMgICA8L2loYXZlcGNkYXRhPgotCTxpZG9udCAvPgotCTxuZWl0aGVyZG9pPmRvIGkgaGF2ZSBwY2RhdGE/IGknbSBub3Qgc3VyZS4gYm9vIGhvby48L25laXRoZXJkb2k+Ci08L3BjZGF0YWxpY2lvdXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwODZkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRUxFTUVOVCBwY2RhdGFsaWNpb3VzIChpaGF2ZXBjZGF0YSosaWRvbnQqLG5laXRoZXJkb2kqKT4KLTwhRUxFTUVOVCBpaGF2ZXBjZGF0YSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgaWRvbnQgRU1QVFk+Ci08IUVMRU1FTlQgbmVpdGhlcmRvaSBBTlk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3NGY4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwY2RhdGFsaWNpb3VzIFNZU1RFTSAieG1sLXByZXNlcnZlcGNkYXRhLmR0ZCIgPgotPHBjZGF0YWxpY2lvdXM+Ci0gIDxpaGF2ZXBjZGF0YT5pIGhhdmUgICAgICBwY2RhdGE8L2loYXZlcGNkYXRhPgotICA8aWhhdmVwY2RhdGE+ICAgaSBoYXZlICAKLSAgCi0gIAotICAKLSAgICAgIHNwYWNlcyAgIDwvaWhhdmVwY2RhdGE+Ci0gIDxpZG9udC8+Ci0gIDxuZWl0aGVyZG9pPmRvIGkgaGF2ZSBwY2RhdGE/IGknbSBub3Qgc3VyZS4gYm9vIGhvby48L25laXRoZXJkb2k+Ci08L3BjZGF0YWxpY2lvdXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWFjdHVhbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWFjdHVhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMGMwNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1hY3R1YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLSAgIG9mIHRoZSBmb3JtYXR0ZXIuCi0gICA8cHJlc2VydmUgeG1sOnNwYWNlPSJkZWZhdWx0Ij4KLQkJVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuCi0KLQkJYW5kIHNob3VsZCBiZSByZWZvcm1hdHRlZC4KLSAgIDwvcHJlc2VydmU+Ci0gICAKLTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdD4KLSBObyBtYW4KLSAKLSBpcyBhbgotIAotIGlzbGFuZCwgLgotICAuCi0gIC4KLSBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwIHBsZWFzZSAtIHdhc3RlIG9mICAgICAgICAgICBzcGFjZQotIAk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotICAgPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4gIDxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxZTZmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBtYWluIFNZU1RFTSAieG1sLXNwYWNlLXByZXNlcnZlLmR0ZCI+Ci08bWFpbj4KLQk8bm90aGluZz50aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2U8L25vdGhpbmc+Ci0JPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0Jb2YgdGhlIGZvcm1hdHRlci4KLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJkZWZhdWx0Ij4KLQkJVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuCi0KLQkJYW5kIHNob3VsZCBiZSByZWZvcm1hdHRlZC4KLQk8L3ByZXNlcnZlPgotCi0JPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0PgotCQkJTm8gbWFuCi0KLQkJCWlzIGFuCi0KLQkJCWlzbGFuZCwgLiAuIC4gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cAotCQkJcGxlYXNlIC0gd2FzdGUgb2Ygc3BhY2UKLSAgPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLQk8cHJlc2VydmUyPgotVGhpcyBwYXJ0aWN1bGFyCi0gIHRleHQgbWF5IAotCi1ub3QgIHJlZm9ybWF0dGVkLjwvcHJlc2VydmUyPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjOTQ5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBtYWluIFNZU1RFTSAieG1sLXNwYWNlLXByZXNlcnZlLmR0ZCI+Ci08bWFpbj4KLQk8bm90aGluZz4gdGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlIDwvbm90aGluZz4KLQk8cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLQlvZiB0aGUgZm9ybWF0dGVyLgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotCQlUaGlzIHBhcnRpY3VsYXIgdGV4dCBjYW4gYW5kIHNob3VsZCBiZSByZWZvcm1hdHRlZC4KLQk8L3ByZXNlcnZlPgotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdD4KLQkJTm8gbWFuIGlzIGFuIGlzbGFuZCwgLiAuIC4gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cAotCQlwbGVhc2UgLSB3YXN0ZSBvZiBzcGFjZQotCTwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4KLQk8bm90aGluZz4gdGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTJiNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBtYWluIFNZU1RFTSAieG1sLXNwYWNlLXByZXNlcnZlLmR0ZCI+Ci08bWFpbj4KLQk8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTxwcmVzZXJ2ZSAgICAgPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyLgotICAgPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci1UaGlzIHBhcnRpY3VsYXIgdGV4dCBjYW4gCi0KLWFuZCAgICAgc2hvdWxkIGJlIHJlZm9ybWF0dGVkLjwvcHJlc2VydmU+Ci0gICAKLTxwcmVzZXJ2ZSAgICAgPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0ID4KLSBObyBtYW4KLSAKLSBpcyBhbgotIAotIGlzbGFuZCwgLgotICAuCi0gIC4KLSBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwIHBsZWFzZSAtIHdhc3RlIG9mICAgICAgICAgICBzcGFjZQotIAk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotICAgPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4gIDxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTE5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLQlvZiB0aGUgZm9ybWF0dGVyCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiIGJ1dC1hdHRyLWNsZWFuLXVwPSJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdAotCQkJeG1sOnNwYWNlPSJkZWZhdWx0Ij4KLQkJCU5vIG1hbgotCi0JCQlpcyBhbgotCi0JCQlpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0gIDwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZmNmN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JPG5vdGhpbmc+IHRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZSA8L25vdGhpbmc+Ci0JPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiIGJ1dC1hdHRyLWNsZWFuLXVwPSJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIKLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgYnV0LWF0dHItY2xlYW4tdXA9InRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0Ci0JCXhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCU5vIG1hbiBpcyBhbiBpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJcGxlYXNlIC0gd2FzdGUgb2Ygc3BhY2UKLQk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxub3RoaW5nPiB0aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2UgPC9ub3RoaW5nPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxODc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyCi08cHJlc2VydmUgIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0IHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1NjdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+DQotDQotPCFFTEVNRU5UIG1haW4gKCNQQ0RBVEEgfCBub3RoaW5nIHwgcHJlc2VydmUgfCBwcmVzZXJ2ZTIpKiA+DQotDQotPCFFTEVNRU5UIHByZXNlcnZlICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCi0NCi08IUVMRU1FTlQgcHJlc2VydmUyICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlMiB4bWw6c3BhY2UgTk1UT0tFTiAjRklYRUQgInByZXNlcnZlIj4NCi0NCi08IUVMRU1FTlQgc3BhY2UtZGVmYXVsdCAoI1BDREFUQXwgbm90aGluZyB8IHByZXNlcnZlKSo+DQotPCFBVFRMSVNUIHNwYWNlLWRlZmF1bHQgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAnZGVmYXVsdCc+DQotDQotPCFFTEVNRU5UIG5vdGhpbmcgKCNQQ0RBVEEpID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QtYWN0dWFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTNlNWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzb25nIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InhtbC13aGl0ZXNwYWNlLnhzZCI+Ci0JPGFydGlzdD4gICBTb21lICBTaW5nZXIgIDwvYXJ0aXN0PgotCTx5ZWFyPjE5OTI8L3llYXI+Ci0JPHRpdGxlPkxvcmVtIGlwc3VtIGRvbG9yPC90aXRsZT4KLQk8bHlyaWNzPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgotCQkgTnVuYyBpbiBuaXNpLiBJbnRlZ2VyIHF1aXMgcXVhbSBub24gZXJvcyBhY2N1bXNhbiBlbGVtZW50dW0uCi0JCQlTZWQgcmlzdXMgb3JjaSwJCSBsb2JvcnRpcyBhdCwgcHVsdmluYXIgYXQsIHZhcml1cyBhYywgbmVxdWUuCi0JTW9yYmkgcGVkZSBudWxsYSwgdGluY2lkdW50IGFjLCBzZW1wZXIgdmVsLCB1bHRyaWNpZXMgdml0YWUsIGxhY3VzLgotCQlOdW5jIG51bmMuCQkgICA8L2x5cmljcz4KLQk8bGVuZ3RoPjI8L2xlbmd0aD4KLQk8YWxidW0+TG9yZW0gaXBzdW0gZG9sb3I8L2FsYnVtPgotCTxsb2NhdGlvbj4gICAgIFJhbGVpZ2gsICBOQywgICAgICBVU0EgIDwvbG9jYXRpb24+Ci08L3Nvbmc+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlYmQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzb25nIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InhtbC13aGl0ZXNwYWNlLnhzZCI+Ci0JPGFydGlzdD4JCSBTb21lIAlTaW5nZXIKLQk8L2FydGlzdD4KLQk8eWVhcj4JMTk5MiA8L3llYXI+Ci0JPHRpdGxlPiAgIAlMb3JlbQkJICAgIGlwc3VtIGRvbG9yCTwvdGl0bGU+Ci0JPGx5cmljcz5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KLQkJIE51bmMgaW4gbmlzaS4gSW50ZWdlciBxdWlzIHF1YW0gbm9uIGVyb3MgYWNjdW1zYW4gZWxlbWVudHVtLgotCQkJU2VkIHJpc3VzIG9yY2ksCQkgbG9ib3J0aXMgYXQsIHB1bHZpbmFyIGF0LCB2YXJpdXMgYWMsIG5lcXVlLgotCU1vcmJpIHBlZGUgbnVsbGEsIHRpbmNpZHVudCBhYywgc2VtcGVyIHZlbCwgdWx0cmljaWVzIHZpdGFlLCBsYWN1cy4KLQkJTnVuYyBudW5jLgkJICAgPC9seXJpY3M+Ci0JPGxlbmd0aD4yPC9sZW5ndGg+Ci0JPGFsYnVtPgkgICAJTG9yZW0gCWlwc3VtIGRvbG9yIDwvYWxidW0+Ci0JPGxvY2F0aW9uPiAgICAJUmFsZWlnaCwgCU5DLCAJCQkJCVVTQQkJPC9sb2NhdGlvbj4KLTwvc29uZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmOTc3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ic29uZyIgdHlwZT0ieHNkU29uZyIgLz4KLQk8IS0tIERlZmluZSBhIHNpbXBsZSB0eXBlIHRvIHRlc3QgdGhhdCB0aGUgaGllcmFyY2h5IG92ZXJyaWRpbmcgd2hpdGVzcGFjZSBydWxlIGlzIG9ic2VydmVkIC0tPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb2xsYXBzZWRTdHJpbmciPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8IS0tIERlZmluZSBhIHNpbXBsZSB0eXBlIHRvIHRlc3QgdGhhdCB0aGUgd2hpdGVzcGFjZSBydWxlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBhbmNlc3RvciAtLT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTm9ybWFsaXplZCI+Ci0gIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6bm9ybWFsaXplZFN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gIAk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ieHNkU29uZyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGJlIHJlcGxhY2VkIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImFydGlzdCIgdHlwZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ieWVhciIgdHlwZT0ieHNkOm5vbk5lZ2F0aXZlSW50ZWdlciIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InhzZDp0b2tlbiIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgYmUgcHJlc2VydmVkIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Imx5cmljcyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibGVuZ3RoIiB0eXBlPSJ4c2Q6ZHVyYXRpb24iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iYWxidW0iIHR5cGU9IkNvbGxhcHNlZFN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhdGlvbiIgdHlwZT0iTm9ybWFsaXplZCIgLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTQyNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLQl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTxodG1sPgotCQkJPGJvZHk+Ci0JCQkJPGgyPlNwYWNlIENoZWNraW5nPC9oMj4KLQkJCQk8cD4KLQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPmNlbnRlcjwveHNsOmF0dHJpYnV0ZT4KLQkJCQkJQ2hlY2s6Ci0JCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJ0ZXh0L2l0ZW0iPgotCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIgLz4KLQkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT1sYXN0KCktMSI+Ci0JCQkJCQkJPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotCQkJCQkJCTx4c2w6dGV4dD4gICAgbGVhZGluZyBzcGFjZXM8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpIj4KLQkJCQkJCQk8eHNsOnRleHQ+bm9zcGFjZTwveHNsOnRleHQ+Ci0JCQkJCQk8L3hzbDppZj4KLQkJCQkJPC94c2w6Zm9yLWVhY2g+Ci0JCQkJPC9wPgotCQkJPC9ib2R5PgotCQk8L2h0bWw+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4N2UzODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgoteG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci08aHRtbD4KLSAgICA8Ym9keT4KLSAgICA8aDI+U3BhY2UgQ2hlY2tpbmc8L2gyPgotICAgIDxwPjx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+Q2hlY2s6PHhzbDpmb3ItZWFjaCBzZWxlY3Q9InRleHQvaXRlbSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIvPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKS0xIj4KLSAgICAgICAgPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotICAgICAgICA8eHNsOnRleHQ+ICAgIGxlYWRpbmcgc3BhY2VzPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKSI+Ci0gICAgICAgIDx4c2w6dGV4dD5ub3NwYWNlPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgIDwveHNsOmZvci1lYWNoPgotICAgIDwvcD4KLSAgPC9ib2R5PgotICA8L2h0bWw+Ci08L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1ZjVhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RGcmFnRmlsZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RGcmFnKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nMSA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cclxuIiArICI8IS0tVGhpcyBpcyBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlIC0gbWFudWFsIGNoYW5nZXMgdG8gaXQgd2lsbCBiZSBpZ25vcmVkIGFuZCBvdmVyd3JpdHRlbi4tLT5cclxuIiArICI8RnJhZ21lbnQgcGFyZW50PVwiL2VqYi1qYXIvZW50ZXJwcmlzZS1iZWFucyZsdDtkZXNjcmlwdGlvbixkaXNwbGF5LW5hbWUsc21hbGwtaWNvbixsYXJnZS1pY29uXCIgZGVzdGluYXRpb249XCJlamItamFyLnhtbFwiIHR5cGU9XCJ4bWxcIiB4bWxpZD1cImlkLHhtaTppZFwiIHRhZ1NldD1cImVqYlwiPlxyXG4iICsgIjxzZXNzaW9uIGlkPVwiZWpicy5UZXN0QmVhblwiPlxyXG4iICsgIjxlamItbmFtZT5UZXN0PC9lamItbmFtZT5cclxuIiArICI8aG9tZT5lamJzLlRlc3RIb21lPC9ob21lPlxyXG4iICsgIjxyZW1vdGU+ZWpicy5UZXN0PC9yZW1vdGU+XHJcbiIgKyAiPGVqYi1jbGFzcz5lamJzLlRlc3RCZWFuPC9lamItY2xhc3M+XHJcbiIgKyAiPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT5cclxuIiArICI8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+XHJcbiIgKyAiPC9zZXNzaW9uPlxyXG4iICsgIjwvRnJhZ21lbnQ+IjsKLQotCi0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRlc3RTdHJpbmcxLmdldEJ5dGVzKCJ1dGY4IikpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZCgidGVzdC5mcmFnIiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZ1goKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZ3giLCBpbnB1dFN0cmVhbSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDkwZDBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKCkgewotCQlzdXBlcigiVGVzdE1vZGVsTWFuYWdlciIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgYWZ0ZXIgdXNlIQotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpIHsKLQkJLy8gZnJvbSBhIGZpbGUKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGYpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JfQotCQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNTSgpIHsKLQkJcmV0dXJuIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvcHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCXRyeSB7Ci0JCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbENvcHkgPSBnZXRNTSgpLmNvcHlNb2RlbEZvckVkaXQobW9kZWwuZ2V0SWQoKSwgIm5ld0lkIik7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiY29waWVkIG1vZGVsIHdhcyBudWxsIiwgbW9kZWxDb3B5KTsKLQkJCX0KLQkJCWNhdGNoIChSZXNvdXJjZUluVXNlIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gZ2V0TU0oKS5jcmVhdGVOZXdJbnN0YW5jZShtb2RlbCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZSBvZjogIiArIG1vZGVsLCBtb2RlbCAhPSBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQkvLyBlbnN1cmUgbW9kZWwgYWxyZWFkeSBleGlzdHMKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJYm9vbGVhbiByZXNvdXJjZUV4aXN0cyA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlnZXRNTSgpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCX0KLQkJCWNhdGNoKFJlc291cmNlQWxyZWFkeUV4aXN0cyBleCkgewotCQkJCXJlc291cmNlRXhpc3RzID0gdHJ1ZTsKLQkJCX0KLQkJCWFzc2VydFRydWUoInNob3VsZCBoYXZlIGdvdHRlbiBSZXNvdXJjZUFscmVhZHlFeGl0cyBleGNlcHRpb24iLCByZXNvdXJjZUV4aXN0cyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBnZXRNTSgpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgc3RydWN0dXJlZCBkb2N1bWVudCIsIHNEb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21GaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZXhpc3RpbmdNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWV4aXN0aW5nTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGYpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGdldCBleGlzdGluZyBtb2RlbCIsIGV4aXN0aW5nTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZXhpc3RpbmdNb2RlbCAhPSBudWxsKQotCQkJCWV4aXN0aW5nTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbHMgc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlIiwgbW9kZWwgPT0gZ290dGVuTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZ290dGVuTW9kZWwgIT0gbnVsbCkKLQkJCQlnb3R0ZW5Nb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kZWxGcm9tRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBnZXQgbW9kZWwiLCBtb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkgICAgZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldE1vZGVsRm9yRWRpdChkb2MpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWxzIHNob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5jZSIsIG1vZGVsID09IGdvdHRlbk1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGdvdHRlbk1vZGVsICE9IG51bGwpCi0JCQkJZ290dGVuTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNTaGFyZWQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsMiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCW1vZGVsMiA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCS8vIFRPRE86IHdpbGwgY2hhbmdlIHdoZW4gQVBJIGFkZGVkIHRvIE1NCi0JCQlib29sZWFuIGlzU2hhcmVkID0gZ2V0TU0oKS5pc1NoYXJlZChtb2RlbC5nZXRJZCgpKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIHNob3VsZCBiZSBzaGFyZWQiLCBpc1NoYXJlZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChtb2RlbDIgIT0gbnVsbCkKLQkJCQltb2RlbDIucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVpbml0aWFsaXplKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWdldE1NKCkucmVpbml0aWFsaXplKG1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGNoYW5nZSB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JCQltb2RlbC5zYXZlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWxJZk5vdFNoYXJlZCgpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTVhNDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbHNGcm9tRmlsZXMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQxLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMiA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDIueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUzID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50My54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiOwotCXByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEZpbGVXaXRoQnVmZmVyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVCdWZmZXIoTk9ORVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoTk9ORVhJU1RFTlRfRklMRU5BTUUyLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MSURzKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVJRHMoTk9ORVhJU1RFTlRfRklMRU5BTUUzLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUNhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZShFWElTVEVOVF9GSUxFTkFNRTEsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0gc3RyaW5nU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCJ0ZXN0aW5nIHRlc3RpbmcgdGVzdGluZyIpOwotCQlmaWxlLmNyZWF0ZShzdHJpbmdTdHJlYW0sIGZhbHNlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQkvLyBjb3VudCBhcyBzdWNjZXNzIGlmIGdldHMgdG8gaGVlciB3aXRob3V0IGV4Y2VwdGlvbgotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJCVN0cmluZyBmaWxlTG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCVN0cmluZyBpZCA9IG1vZGVsLmdldElkKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGVMb2NhdGlvbjogIiArIGZpbGVMb2NhdGlvbik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJpZDogIiArIGlkKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUJ1ZmZlcihTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQmVmb3JlRXhpc3RzID0gZ2V0VGV4dEJ1ZmZlcihmaWxlKTsKLQotCQlhZGRDb250ZW50c0FuZENyZWF0ZUZpbGUoZmlsZSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIGZpbGVCdWZmZXJBZnRlckV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYm9vbGVhbiBidWZmZXJzSWRlbnRpY2FsID0gZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9PSBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHM7Ci0JCWFzc2VydFRydWUoYnVmZmVyc0lkZW50aWNhbCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMuZ2V0TG9jYXRpb24oKSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZUJ1ZmZlckFmdGVyRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQl9Ci0JCQotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlSURzKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0KLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJJRDogIiArIG1vZGVsLmdldElkKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFzZUxvY2F0aW9uIiArIG1vZGVsLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElUZXh0RmlsZUJ1ZmZlciBnZXRUZXh0QnVmZmVyKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBmaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBmaWxlSVBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlQYXRoIG5vcm1hbGl6ZWRQYXRoID0gRmlsZUJ1ZmZlcnMubm9ybWFsaXplTG9jYXRpb24oZmlsZUlQYXRoKTsKLQkJZmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChub3JtYWxpemVkUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBmaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihub3JtYWxpemVkUGF0aCk7Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NmQ5MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZE1vZGVsIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9ICJET0NVTUVOVC1MT0FERVIiOwotCS8vIGlzIGl0IGEgcHJvYmxlbSB0byB1bnppcCB0aGUgc2FtZSBwcm9qZWN0IGluCi0JLy8gZGlmZmVyZW50IHRlc3RzPwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRNb2RlbCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkTW9kZWwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQkKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWJvdXRUb0NoYW5nZU1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSZW1vdmVNb2RlbFN0YXRlTGlzdGVuZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IElNb2RlbFN0YXRlTGlzdGVuZXIoKSB7Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbEFib3V0VG9CZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vIAkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbERpcnR5U3RhdGVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIGJvb2xlYW4gaXNEaXJ0eSkgewotCQkJCQkvLwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VEZWxldGVkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8gCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxSZXNvdXJjZU1vdmVkKElTdHJ1Y3R1cmVkTW9kZWwgb2xkTW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwpIHsKLQkJCQkJLy8gCQkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbEFib3V0VG9CZVJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJCQkJLy8gCQotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVpbml0aWFsaXplZChJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQkJCQkvLyAKLQkJCQl9Ci0JCQl9OwotCi0JCQltb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQotCQkJbW9kZWwucmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSAqIFRlc3QgZXhwZWN0ZXMgYW4gZXhjZXB0aW9uIHNpbmNlIG9ubHkgYSBjaGFuZ2VkTW9kZWwgc2VudCwgd2l0aG91dAotCSAqIGJlZ2lubmluZyAnYWJvdXRUb0NoYW5nZU1vZGVsJwotCSAqIAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlZE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWFzc2VydFRydWUoZSBpbnN0YW5jZW9mIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbik7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJU3RyaW5nIGN0ID0gbW9kZWwuZ2V0Q29udGVudFR5cGVJZGVudGlmaWVyKCk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgd3JvbmcgY29udGVudCB0eXBlOiIgKyBjdCArICIgIT0gIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIGN0LmVxdWFscyhDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEJhc2VMb2NhdGlvbigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBsb2NhdGlvbiA9IG1vZGVsLmdldEJhc2VMb2NhdGlvbigpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgYmFzZSBsb2NhdGlvbiIsIGxvY2F0aW9uLmVxdWFscygiLyIgKyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yeVJlZ2lzdHJ5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRleGVkUmVnaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigwKTsKLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGV4ZWRSZWdpb25zKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJLy8gbm90IGltcGxlbWVudGVkIHlldC4uLgotCQkJLy8gbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbnMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZG9jdW1lbnQgaXMgbnVsbCIsIGRvYyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzRGlydHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRGYWxzZSgibW9kZWwgc2hvdWxkIG5vdCBiZSBkaXJ0eSIsIG1vZGVsLmlzRGlydHkoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzTW9kZWxTdGF0ZUNoYW5naW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQlhc3NlcnRGYWxzZSgibW9kZWwgc2hvdWxkIG5vdCBiZSBjaGFuZ2luZyIsIG1vZGVsLmlzTW9kZWxTdGF0ZUNoYW5naW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc05ldygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJLy8gdGhpcyBBUEkgc2VlbXMgc3RyYW5nZQotCQkvLyBhc3NlcnRGYWxzZSgibmV3IG1vZGVsIGNoZWNrIGZhaWxlZCIsIG1vZGVsLmlzTmV3KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCWFzc2VydEZhbHNlKCJyZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgYmUgbmVlZGVkIiwgbW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdElzU2F2ZU5lZWRlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCWFzc2VydEZhbHNlKCJzYXZlIHNob3VsZCBub3QgYmUgbmVlZGVkIiwgbW9kZWwuaXNTYXZlTmVlZGVkKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3SW5zdGFuY2UgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQluZXdJbnN0YW5jZSA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWFzc2VydFRydWUoIklPRXhjZXB0aW9uIGR1cmluZyBtb2RlbCBuZXcgaW5zdGFuY2UiLCBmYWxzZSk7Ci0JCQl9Ci0JCQlhc3NlcnROb3ROdWxsKCJuZXcgaW5zdGFuY2UgaXMgbnVsbCIsIG5ld0luc3RhbmNlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBCZSBzdXJlIHRvIHJlbGVhc2UgYW55IG1vZGVscyBvYnRhaW5lZCBmcm9tIHRoaXMgbWV0aG9kLgotCSAqIAotCSAqLwotCUlTdHJ1Y3R1cmVkTW9kZWwgZ2V0VGVzdE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JCUlGaWxlIGlGaWxlID0gKElGaWxlKSBwcm9qZWN0LmZpbmRNZW1iZXIoIi9maWxlcy9zaW1wbGUueG1sIik7Ci0JCS8vIGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIKLQotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGlGaWxlKTsKLQotCi0JCXJldHVybiBtb2RlbDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFhNTE1vZGVsTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NjgzMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFhNTE1vZGVsTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWE1MTW9kZWxMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0WE1MTW9kZWxMb2FkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQlwcml2YXRlIFhNTE1vZGVsTG9hZGVyIGZMb2FkZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0iRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCQotCQotICAgIHB1YmxpYyBUZXN0WE1MTW9kZWxMb2FkZXIoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0TW9kZWxMb2FkZXIiKTsKLSAgICB9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJZkxvYWRlciA9IG5ldyBYTUxNb2RlbExvYWRlcigpOwotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewkKLQkKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVFbXB0eU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBpcyBudWxsIiwgbW9kZWwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTW9kZWxXaXRoRG9jdW1lbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZW1wdHlNb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZW1wdHlNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc0RvYy5zZXQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48dGVzdD5cbjxpdGVtIGF0dHI9XCJ2YWxcIiAvPjwvdGVzdD5cbiIpOwotCQkKLQkJLy8gbnVsbCBoYW5kbGRlciBpcyBub3JtYWxseSBub3QgdmFsaWQsIGluY2x1ZGluZyBvbmx5IGZvciB0aGlzIHRlc3QuCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxGcm9tRG9jID0gZkxvYWRlci5jcmVhdGVNb2RlbChzRG9jLCAiL3Rlc3QiLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZnJvbSBkb2MgaXMgbnVsbCIsIG1vZGVsRnJvbURvYyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVNb2RlbFdpdGhNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBlbXB0eU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBlbXB0eU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzRG9jLnNldCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjx0ZXN0PlxuPGl0ZW0gYXR0cj1cInZhbFwiIC8+PC90ZXN0PlxuIik7Ci0JCS8vIFRPRE86IG5lZWQgYW4gZXhpc3RpbmcgZnVsbCBtb2RlbAotCQkvL0lTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxGcm9tTW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKGVtcHR5TW9kZWwpOwotCQkvL2Fzc2VydE5vdE51bGwoIm1vZGVsIGZyb20gbW9kZWwgaXMgbnVsbCIsIG1vZGVsRnJvbU1vZGVsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEFkYXB0ZXJGYWN0b3JpZXMoKSB7Ci0JCUxpc3QgZmFjdG9yaWVzID0gZkxvYWRlci5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCWFzc2VydFRydWUoInRoZXJlIHdlcmUgbm8gYWRhcHRlciBmYWN0b3JpZXMgZm9yIFhNTCIsIGZhY3Rvcmllcy5zaXplKCkgPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdExvYWQoKSB7Ci0JCS8vIGZyb20gYSBmaWxlCQotCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotCQkKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCQlmTG9hZGVyLmxvYWQoZiwgbW9kZWwpOwotCQkJU3RyaW5nIHRleHQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byBsb2FkIiwgdGV4dC5sZW5ndGgoKSA+IDApOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdExvYWRGcm9tU3RyZWFtKCkgewotCQkvLyBuZWVkIHRvIGZpeCB0aGlzIHRlc3QKLQkJLy8gdW5sZXNzIHRoZSBBUEkgaXMgZ29pbmcgYXdheS4uLgotLy8JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0vLwkJCi0vLwkJdHJ5IHsKLS8vCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLS8vCQkJZkxvYWRlci5sb2FkKGYuZ2V0Q29udGVudHMoKSwgbW9kZWwsIEVuY29kaW5nUnVsZS5GT1JDRV9ERUZBVUxUKTsKLS8vCQkJU3RyaW5nIHRleHQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLS8vCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIGxvYWQiLCB0ZXh0Lmxlbmd0aCgpID4gMCk7Ci0vLwkJfQotLy8JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0JfQotCQotCQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7CQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3JhbmdlL1Rlc3RSYW5nZUNvbXBhcmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3JhbmdlL1Rlc3RSYW5nZUNvbXBhcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmY2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9yYW5nZS9UZXN0UmFuZ2VDb21wYXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnJhbmdlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Eb2N1bWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20ucmFuZ2VzLlJhbmdlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFJhbmdlQ29tcGFyZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVjbCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHZvaWQgdGVzdFJhbmdlQ29tcGFyZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFyZW50Iik7Ly8kTk9OLU5MUy0xJAotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJRWxlbWVudCBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNoaWxkIik7Ly8kTk9OLU5MUy0xJAotCQlyb290LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2hpbGQxLTEiKSk7Ly8kTk9OLU5MUy0xJAotCQlUZXh0IHRleHRub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlRleHQgTm9kZSIpOy8vJE5PTi1OTFMtMSQKLQkJcm9vdC5hcHBlbmRDaGlsZCh0ZXh0bm9kZSk7Ci0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2hpbGQiKTsvLyROT04tTkxTLTEkCi0JCQotCQlSYW5nZSByYW5nZSA9ICgoRG9jdW1lbnRJbXBsKWRvY3VtZW50KS5jcmVhdGVSYW5nZSgpOwotCQlyYW5nZS5zZXRFbmQoY2hpbGRyZW4uaXRlbSgwKSwgMSk7Ci0JCQotCQlSYW5nZSBzb3VyY2VSYW5nZSA9ICgoRG9jdW1lbnRJbXBsKWRvY3VtZW50KS5jcmVhdGVSYW5nZSgpOwotCQlzb3VyY2VSYW5nZS5zZXRFbmQodGV4dG5vZGUsIDApOwotCQlpbnQgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLkVORF9UT19FTkQsIHNvdXJjZVJhbmdlKTsKLQotCQlhc3NlcnRFcXVhbHMoLTEsIHJlc3VsdCk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9OdWxsU3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhmNjZlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLXB1YmxpYyBjbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gLTE7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiBAcGFyYW0gZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lcikKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJaW5TdHJlYW0gPSBuZXcgTnVsbFN0cmVhbSgpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q29ubmVjdCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlhc3NlcnROb3ROdWxsKCJwYXJ0aXRpb25lciB3YXMgbnVsbCBmb3Igc0RvYzoiICsgc0RvYywgcGFydGl0aW9uZXIpOwotCQkJCXRyeSB7Ci0JCQkJCXN0cC5kaXNjb25uZWN0KCk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gZGlzY29ubmVjdGluZyB3LzoiICtzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmNvbm5lY3Qoc0RvYyk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gY29ubmVjdGluZyB3LzoiICsgc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcml0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGVyZlhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgb2Zmc2V0LCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsIHVzaW5nIHRoZQotCSAqIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiAgVGhpcyB0ZXN0IGFsbG93cyBmb3IgdmVyaWZ5aW5nIHRoZSB6ZXJvLWxlbmd0aAotCSAqIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCQotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21wdXRlICIgKyBwYXJ0aXRpb25zLmxlbmd0aCArICI6ICIgKyAoZW5kVGltZS1zdGFydFRpbWUpICsgIiAobXNlY3MpIik7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQkKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJhNTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgICAgICA8dGl0bGU+VGhlIFVsdGltYXRlIEEgQ29tcGFueTwvdGl0bGU+Ci0gICAgICAgIDwvaGVhZD4KLSAgICAgICAgPGJvZHk+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYmFubmVyLmdpZiIgaGVpZ2h0PSI1MSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDwhLS0gY29tbWVudCBhZGRlZCB0byB0ZXN0cyA2IHBhcnRpdGlvbnMgLS0+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZm9vdGVyLmdpZiIgaGVpZ2h0PSIyNSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9lbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDZjY2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSB0ZXN0Y2FzZSBTWVNURU0gInRlc3RjYXNlLmR0ZCI+Ci08IS0tIHRoaXMgZG9jdW1lbnQgd2lsbCBub3QgdmFsaWRhdGUgLS0+Ci08dGVzdGNhc2U+PC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvdGVzdGNhc2UuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDQ0MDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCBlbmNvZGluZz0iVVMtQVNDSUkiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PSBFbnRpdGllcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IUVOVElUWSAlIEVkdFBhZ2VTdWJDYXQgIk91dGxpbmVWaWV3IHwgUHJvcGVydHlTaGVldCB8IFNvdXJjZVZpZXciPgotPCFFTlRJVFkgJSBXZWJTdWJDYXQgIkFjY2Vzc2FiaWxpdHkgfCBBbmltR0lGRGVzaWduZXIgfCBBcHBTZXJ2ZXJDb25maWcgfCBDU1NFZGl0b3IgfCBEQldpemFyZCB8IEZUUEltcG9ydCB8IEZUUEV4cG9ydCB8IEhUVFBJbXBvcnQgfCBKYXZhQmVhbldpemFyZCB8IExpbmtTdHlsZUNvbnZXaXphcmQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua3NWaWV3IHwgTWlzY2VsbGFuZW91cyB8IEhUTUxGaWxlV2l6YXJkIHwgSlNQRmlsZVdpemFyZCB8IFNlcnZsZXRGaWxlV2l6YXJkIHwgV2ViUHJvaldpemFyZCB8IE5MUyB8IFNhbXBsZXMgfCBXZWJBcHBEZXBsb3lEZXNjIj4KLTwhRU5USVRZICUgSFRNTFN1YkNhdCAgIlBhZ2VEZXNpZ25lciB8IERlc2lnblZpZXcgfCAgJUVkdFBhZ2VTdWJDYXQ7IHwgUHJldmlldyI+Ci08IUVOVElUWSAlIFhNTFN1YkNhdCAgIiVFZHRQYWdlU3ViQ2F0OyI+Ci08IUVOVElUWSAlIFN1YkNhdCAiKCVXZWJTdWJDYXQ7IHwgJUhUTUxTdWJDYXQ7IHwgJVhNTFN1YkNhdDspIj4KLTwhRU5USVRZICUgQ2F0ICIod2VidG9vbCB8IGh0bWwgfCB4bWwpIj4KLQotPCFFTlRJVFkgJSBTdGF0ZSAiKFVuZGVmaW5lZCB8IFVuZGVyQ29uc3RydWN0aW9uIHwgVW5kZXJSZXZpZXcgfCBSZXZpZXdDb21wbGV0ZWQgfCBBcHByb3ZlZCB8IFJlYWR5IHwgQ29tcGxldGUgfCBPYnNvbGV0ZSkiPgotPCFFTlRJVFkgJSBCdWNrZXQgIihDb21wb25lbnRUZXN0IHwgUHJvZHVjdFRlc3QgfCBJbnRlZ3JhdGlvblRlc3QgfCBUcmFuc2xhdGlvblRlc3QgfCBVbml0VGVzdCkiPgotPCFFTlRJVFkgJSBQbGF0Zm9ybSAiKEFsbCB8IFdpbjIwMDAgfCBXaW5NRSB8IFdpbk5UIHwgV2luOTggfCBMaW51eFJlZEhhdCB8IENhbGRlcmEgfCBTdVNlIHwgVHVyYm9MaW51eCkiPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT0gRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhRUxFTUVOVCB0ZXN0Y2FzZQotICAJKChoZWFkZXIsIHN1bW1hcnksIGRlZmluaXRpb24sIGV4ZWN1dGlvbiopLHZhcmlhdGlvbiopPgotPCFFTEVNRU5UIHZhcmlhdGlvbgotICAJKGhlYWRlciwgc3VtbWFyeSwgZGVmaW5pdGlvbiwgZXhlY3V0aW9uKik+Ci0KLTwhRUxFTUVOVCBoZWFkZXIgKHN1YmplY3QsIGF1dGhvciwgY29hdXRob3IqLCBjcmVhdGlvbl9kYXRlKT4KLTwhRUxFTUVOVCBzdWJqZWN0ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBhdXRob3IgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNvYXV0aG9yICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjcmVhdGlvbl9kYXRlICgjUENEQVRBKT4KLQotPCEtLSBFeGFtcGxlIG9mIGhhdmluZyBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZSBsaXN0IGRlZmluZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAtLT4KLTwhQVRUTElTVCBoZWFkZXIKLQludW1iZXIJCQlJRAkJI1JFUVVJUkVECi0Jc3RhdGUJCQklU3RhdGU7ICAgICAgICAgIlVuZGVyQ29uc3RydWN0aW9uIgotPgotPCFBVFRMSVNUIGhlYWRlcgotCWNhdGVnb3J5CQklQ2F0OwkJI1JFUVVJUkVECi0Jc3ViQ2F0ZWdvcnkJCSVTdWJDYXQ7CSNSRVFVSVJFRAotCXN1YlN1YkNhdGVvZ29yeQkgICAgICAgIENEQVRBICAgICAgICAgCSNJTVBMSUVECi0JPgotCi08IUVMRU1FTlQgc3VtbWFyeSAodGVzdEJ1Y2tldCssIHBsYXRmb3JtKywgcGFydCosIHJlbGVhc2UrKT4KLTwhRUxFTUVOVCB0ZXN0QnVja2V0IEVNUFRZPgotPCFBVFRMSVNUIHRlc3RCdWNrZXQKLQl0eXBlCQkgCSVCdWNrZXQ7CSNSRVFVSVJFRAotPgotPCFFTEVNRU5UIHBsYXRmb3JtIEVNUFRZPgotPCFBVFRMSVNUIHBsYXRmb3JtCi0JdHlwZQkJIAklUGxhdGZvcm07CSNSRVFVSVJFRAotPgotPCFFTEVNRU5UIHBhcnQgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHJlbGVhc2UgKCNQQ0RBVEEpPgotCi0KLTwhRUxFTUVOVCBkZWZpbml0aW9uIChwdXJwb3NlLCBwcmVyZXF1aXNpdGUqLCBwcm9jZWR1cmUsIGV4cGVjdGVkX3Jlc3VsdHMpPgotPCFFTEVNRU5UIHB1cnBvc2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHByZXJlcXVpc2l0ZSBFTVBUWT4KLTwhQVRUTElTVCBwcmVyZXF1aXNpdGUKLQludW1iZXIJCQlJRFJFRgkJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcHJvY2VkdXJlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBleHBlY3RlZF9yZXN1bHRzICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGV4ZWN1dGlvbiBBTlk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3NzlkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLQotLyoqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25YTUwgewotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBpbnN0YW5jZSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWluc3RhbmNlLnNldFZhbGlkYXRpbmcodmFsaWRhdGluZyk7Ci0JCQlyZXN1bHQgPSBpbnN0YW5jZS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEb2N1bWVudCBkb2N1bWVudCwgT3V0cHV0U3RyZWFtIG9zdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQkJdHJ5IHsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi0xNiIpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdW5zdXBwb3J0ZWQgcHJvcGVydGllcwotCQkJfQotCQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zdHJlYW0pKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkODg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzNkNGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIjsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgxMDVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQljbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQkJcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCi0JY2xhc3MgTXlPdmVyd3JpdGVRdWVyeSBpbXBsZW1lbnRzIElPdmVyd3JpdGVRdWVyeSB7Ci0JCXB1YmxpYyBTdHJpbmcgcXVlcnlPdmVyd3JpdGUoU3RyaW5nIHBhdGhTdHJpbmcpIHsKLQkJCXJldHVybiBBTEw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9KRUNUX1pJUFNfRk9MREVSID0gInByb2plY3R0ZXN0ZmlsZXMiOwotCXByaXZhdGUgTGlzdCBmQ3JlYXRlZFByb2plY3RzID0gbnVsbDsKLQotCXB1YmxpYyBQcm9qZWN0VW56aXBVdGlsaXR5KCkgewotCQkvLyBmb3IgZGVsZXRpb24gbGF0ZXIKLQkJZkNyZWF0ZWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZVRvSW1wb3J0Ci0JICogICAgICAgICAgICB0aGUgZmlsZSB5b3Ugd2lzaCB0byBpbXBvcnQKLQkgKiBAcGFyYW0gZm9sZGVyUGF0aAotCSAqICAgICAgICAgICAgdGhlIGNvbnRhaW5lciBwYXRoIHdpdGhpbiB0aGUgd29ya3NwYWNlCi0JICovCi0JcHVibGljIHZvaWQgaW1wb3J0RmlsZShGaWxlIGZpbGVUb0ltcG9ydCwgU3RyaW5nIGZvbGRlclBhdGgpIHsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcG9ydFByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl0cnkgewotCQkJaWYgKGZpbGVUb0ltcG9ydC5leGlzdHMoKSkgewotCQkJCUlQYXRoIGNvbnRhaW5lclBhdGggPSBuZXcgUGF0aChmb2xkZXJQYXRoKTsKLQkJCQkvL2ZDcmVhdGVkUHJvamVjdHMuYWRkKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7IC8vImM6L2V4YW1wbGUuemlwIjsKLQkJCS8vIFNwZWNpZnkgZGVzdGluYXRpb24gd2hlcmUgZmlsZSB3aWxsIGJlIHVuemlwcGVkCi0JCQkvL1N0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJRmlsZSB1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGVzdGluYXRpb25EaXJlY3RvcnkpOwotCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoc291cmNlWmlwRmlsZSwgWmlwRmlsZS5PUEVOX1JFQUQpOwotCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJRW51bWVyYXRpb24gemlwRmlsZUVudHJpZXMgPSB6aXBGaWxlLmVudHJpZXMoKTsKLQkJCVN0cmluZyBwcm9qZWN0Rm9sZGVyTmFtZSA9IG51bGw7Ci0JCQlJUHJvamVjdCBjdXJyZW50UHJvamVjdCA9IG51bGw7Ci0JCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhY3Rpbmc6ICIgKyBlbnRyeSk7Ci0JCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJLy8gZ3JhYiBmaWxlJ3MgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLQkJCQlGaWxlIGRlc3RpbmF0aW9uUGFyZW50ID0gZGVzdEZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJZGVzdGluYXRpb25QYXJlbnQubWtkaXJzKCk7Ci0JCQkJLy8gZXh0cmFjdCBmaWxlIGlmIG5vdCBhIGRpcmVjdG9yeQotCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwotCQkJCQlpbnQgY3VycmVudEJ5dGU7Ci0JCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnVmZmVyZWRPdXRwdXRTdHJlYW0gZGVzdCA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShmb3MsIEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBjdXJyZW50Qnl0ZSk7Ci0JCQkJCX0KLQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQlkZXN0LmNsb3NlKCk7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJLy8gdW5saWtlIHZlcnNpb24gaW4gc3NlLnRlc3RzLCB3ZSBkb24ndCBjcmVhdGUgcHJvamVjdAotCQkJCQkvLyBmb3IKLQkJCQkJLy8gZXZlcnkgZGlyZWN0b3J5Ci0JCQkJCS8vCQkJCQlpZihwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCS8vCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCS8vCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJCQotCQkJCQkvLwkJCQkJCWN1cnJlbnRQcm9qZWN0ID0KLQkJCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvL2NoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJaWYgKCFwcm9qLmV4aXN0cygpKSB7Ci0JCQlwcm9qLmNyZWF0ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YQotCQkvLyBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1OWM4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNDcxZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBvbmUgdGltZXN0YW1wIHBlciBWTSBydW4uCi0gKiAoVGVjaG5pY2FsbHksIHBlciBjbGFzcyBsb2FkaW5nLikKLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcFV0aWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgRGF0ZSB0aW1lc3RhbXAgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgc2hvcnRGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQiKTsKLQkvLwlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IGxvbmdGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3dTaG9ydCA9IG51bGw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0aW1lc3RhbXAoKSB7Ci0KLQkJaWYgKFRpbWVzdGFtcFV0aWwubm93U2hvcnQgPT0gbnVsbCkgewotCQkJVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9IHNob3J0Rm9ybWF0LmZvcm1hdChlbnN1cmVUaW1lc3RhbXAoKSk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwubm93U2hvcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBEYXRlIGVuc3VyZVRpbWVzdGFtcCgpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgJ3RpbWVzdGFtcCcgb25jZSBwZXIgY2xhc3MgbG9hZGluZywgCi0JCS8vIHNvIHRoaXMgJ3RpbWVzdGFtcCcgcmVtYWlucyB0aGUgc2FtZSBkdXJpbmcgCi0JCS8vIGVudGlyZSBydW4uIAotCQlpZiAoVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwudGltZXN0YW1wOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIxYWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0ZjMzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5NjhiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCi1qYXZhQ29tcGlsZXIudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWMzNzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2NGFmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1NTRhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NTcgKzAsMCBAQAotCi1DdXJyZW50IExvY2FsZTogZW5fVVMKLQotSlJFIHZlcnNpb246IEoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYtMjAwNDAxMjggKEpJVCBlbmFibGVkOiBqaXRjKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLmFzc2lzdGl2ZT1PTgotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudm0udmVyc2lvbj0xLjQuMgotamF2YS52bS52ZW5kb3I9SUJNIENvcnBvcmF0aW9uCi1qYXZhLnZlbmRvci51cmw9aHR0cDovL3d3dy5pYm0uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUNsYXNzaWMgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yCi1qYXZhLmZ1bGx2ZXJzaW9uPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1qYXZhLmF3dC5mb250cz0KLW9zLm5hbWU9V2luZG93cyBYUAotc3VuLmphdmEyZC5mb250cGF0aD0KLWphdmEubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgUGxhdGZvcm0gQVBJIFNwZWNpZmljYXRpb24KLWphdmEuY2xhc3MudmVyc2lvbj00OC4wCi1pYm0uc3lzdGVtLmVuY29kaW5nPUNwMTI1MgotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1pbnZva2VkdmlhamF2YT0KLW9zLnZlcnNpb249NS4xCi11c2VyLmhvbWU9QzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xkYXZpZHcuRE1XMlQyMwotdXNlci50aW1lem9uZT0KLWphdmEuYXd0LnByaW50ZXJqb2I9c3VuLmF3dC53aW5kb3dzLldQcmludGVySm9iCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi11c2VyLm5hbWU9ZGF2aWR3Ci1qYXZhLmNsYXNzLnBhdGg9RDpcYnVpbGRzXERhaWx5XGVjbGlwc2UtU0RLLUkyMDA0MDMwNC4uLgotamF2YS52bS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS4wCi1zdW4uYXJjaC5kYXRhLm1vZGVsPTMyCi1qYXZhLmhvbWU9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotamF2YS5zcGVjaWZpY2F0aW9uLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLXVzZXIubGFuZ3VhZ2U9ZW4KLWF3dC50b29sa2l0PXN1bi5hd3Qud2luZG93cy5XVG9vbGtpdAotamF2YS52bS5pbmZvPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEudmVyc2lvbj0xLjQuMgotamF2YS5leHQuZGlycz1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz0KLWphdmEuY29tcGlsZXI9aml0Ywotc3VuLmlvLnVuaWNvZGUuZW5jb2Rpbmc9VW5pY29kZUxpdHRsZQotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1ibl9JTgotY2EKLWNhX0VTCi1jYV9FU19QUkVFVVJPCi1jcwotY3NfQ1oKLWRhCi1kYV9ESwotZGFfREtfRVVSTwotZGUKLWRlX0FUCi1kZV9BVF9QUkVFVVJPCi1kZV9DSAotZGVfREUKLWRlX0RFX1BSRUVVUk8KLWRlX0xVCi1kZV9MVV9QUkVFVVJPCi1lbAotZWxfR1IKLWVsX0dSX1BSRUVVUk8KLWVuCi1lbl9BVQotZW5fQkUKLWVuX0JFX1BSRUVVUk8KLWVuX0NBCi1lbl9HQgotZW5fR0JfRVVSTwotZW5fSEsKLWVuX0lFCi1lbl9JRV9QUkVFVVJPCi1lbl9JTgotZW5fTloKLWVuX1BICi1lbl9TRwotZW5fVVMKLWVuX1pBCi1lcwotZXNfQVIKLWVzX0JPCi1lc19DTAotZXNfQ08KLWVzX0NSCi1lc19ETwotZXNfRUMKLWVzX0VTCi1lc19FU19QUkVFVVJPCi1lc19HVAotZXNfSE4KLWVzX01YCi1lc19OSQotZXNfUEEKLWVzX1BFCi1lc19QUgotZXNfUFkKLWVzX1NWCi1lc19VUwotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZmlfRklfUFJFRVVSTwotZnIKLWZyX0JFCi1mcl9CRV9QUkVFVVJPCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9GUl9QUkVFVVJPCi1mcl9MVQotZnJfTFVfUFJFRVVSTwotZ3UKLWd1X0lOCi1oaQotaGlfSU4KLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pbgotaW5fSUQKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotaXRfSVRfUFJFRVVSTwotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtrCi1ra19LWgota24KLWtuX0lOCi1rbwota29rX0lOCi1rb19LUgotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbWxfSU4KLW1yCi1tcl9JTgotbXMKLW1zX01ZCi1uYl9OTwotbmwKLW5sX0JFCi1ubF9CRV9QUkVFVVJPCi1ubF9OTAotbmxfTkxfUFJFRVVSTwotbm8KLW5vX05PCi1ub19OT19OWQotb3JfSU4KLXBhCi1wYV9JTgotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1wdF9QVF9QUkVFVVJPCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2EKLXNhX0lOCi1zaAotc2hfWVUKLXNrCi1za19TSwotc2wKLXNsX1NJCi1zcQotc3FfQUwKLXNyCi1zcl9ZVQotc3YKLXN2X1NFCi1zdl9TRV9FVVJPCi10YQotdGFfSU4KLXRlCi10ZV9JTgotdGgKLXRoX1RICi10aF9USF9USAotdHIKLXRyX1RSCi11awotdWtfVUEKLXZpCi12aV9WTgotemgKLXpoX0NOCi16aF9DTl9ISwotemhfSEsKLXpoX1NHCi16aF9UVwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNTogUEMgVGFpd2FuIEJpZyA1Ci0JYWxpYXNlczogW2JpZzUsIEJpZzUtSEtTQ1NdCi0yLiAgQ2hhcnNldG5hbWU6IENFU1UtOAotCWRpc3BsYXlOYW1lOiBDRVNVLTg6IFVuaWNvZGUgVVRGLTggKHdpdGhvdXQgc3Vycm9nYXRlcykKLQlhbGlhc2VzOiBbQ0VTVThdCi0zLiAgQ2hhcnNldG5hbWU6IENPTVBPVU5EX1RFWFQKLQlkaXNwbGF5TmFtZTogQ09NUE9VTkRfVEVYVDogWDExIENvbXBvdW5kIFRleHQKLQlhbGlhc2VzOiBbeC1jb21wb3VuZC10ZXh0LCB4MTEtY29tcG91bmQtdGV4dF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUNOCi0JZGlzcGxheU5hbWU6IEVVQy1DTjogRVVDIENoaW5hCi0JYWxpYXNlczogW2V1Y19jbiwgZXVjY24sIGlibS1ldWNjbl0KLTUuICBDaGFyc2V0bmFtZTogRVVDLUpQCi0JZGlzcGxheU5hbWU6IEVVQy1KUDogRVVDIEphcGFuCi0JYWxpYXNlczogW2V1Yy1qcC1saW51eCwgeC1ldWMtanAsIHgtZXVjanAsIGV1Y19qcF9saW51eCwgZXVjanAsIGV1Y19qcF0KLTYuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUjogRVVDIEtvcmVhCi0JYWxpYXNlczogWzU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGlibS1ldWNrciwga3NjNTYwMS0xOTg3LCBpYm0tOTcwLCBldWNfa3IsIENwOTcwLCBrc19jXzU2MDEtMTk4NywgZXVja3JdCi03LiAgQ2hhcnNldG5hbWU6IEVVQy1UVwotCWRpc3BsYXlOYW1lOiBFVUMtVFc6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbZXVjX3R3LCBjbnMxMTY0MywgZXVjdHddCi04LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMDogUEMgQ2hpbmEgR0IxODAzMAotCWFsaWFzZXM6IFt3aW5kb3dzLTU0OTM2LCBpYm0tMTM5MiwgZ2IxODAzMC0yMDAwXQotOS4gIENoYXJzZXRuYW1lOiBHQjIzMTIKLQlkaXNwbGF5TmFtZTogR0IyMzEyCi0JYWxpYXNlczogW2diMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi0xMC4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLOiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbR0JLXQotMTEuICBDaGFyc2V0bmFtZTogaHAtcm9tYW44Ci0JZGlzcGxheU5hbWU6IGhwLXJvbWFuODogSFAgUm9tYW4gOAotCWFsaWFzZXM6IFtDcDEwNTEsIGlibS0xMDUxLCByb21hbjgsIHI4XQotMTIuICBDaGFyc2V0bmFtZTogSUJNLTAzNwotCWRpc3BsYXlOYW1lOiBJQk0tMDM3OiBFQkNESUMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtpYm0tMzddCi0xMy4gIENoYXJzZXRuYW1lOiBJQk0tMTAwNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAwNjogSVNPIFVyZHUKLQlhbGlhc2VzOiBbaWJtMTAwNiwgQ3AxMDA2XQotMTQuICBDaGFyc2V0bmFtZTogSUJNLTEwMjUKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjU6IEVCQ0RJQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0xMDI1LCBDcDEwMjVdCi0xNS4gIENoYXJzZXRuYW1lOiBJQk0tMTAyNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAyNjogRUJDRElDIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMDI2LCBpYm0xMDI2XQotMTYuICBDaGFyc2V0bmFtZTogSUJNLTEwMjcKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjc6IEVCQ0RJQyBTQkNTIEphcGFuCi0JYWxpYXNlczogW2libTEwMjcsIENwMTAyN10KLTE3LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQxCi0JZGlzcGxheU5hbWU6IElCTS0xMDQxOiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMDQxLCBpYm0xMDQxXQotMTguICBDaGFyc2V0bmFtZTogSUJNLTEwNDMKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDM6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMDQzLCBpYm0xMDQzXQotMTkuICBDaGFyc2V0bmFtZTogSUJNLTEwNDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDY6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtMTA0NiwgQ3AxMDQ2XQotMjAuICBDaGFyc2V0bmFtZTogSUJNLTEwNDZTCi0JZGlzcGxheU5hbWU6IElCTS0xMDQ2UzogRUJDRElDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtDcDEwNDZTLCBpYm0xMDQ2U10KLTIxLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ3OiBFQkNESUMgT3BlbiBFZGl0aW9uCi0JYWxpYXNlczogW0NwMTA0NywgaWJtMTA0N10KLTIyLiAgQ2hhcnNldG5hbWU6IElCTS0xMDg4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDg4OiBQQyBTQkNTLW9ubHkgS29yZWFuIEtTCi0JYWxpYXNlczogW0NwMTA4OCwgaWJtMTA4OF0KLTIzLiAgQ2hhcnNldG5hbWU6IElCTS0xMDk3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk3OiBFQkNESUMgRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk3LCBpYm0xMDk3XQotMjQuICBDaGFyc2V0bmFtZTogSUJNLTEwOTgKLQlkaXNwbGF5TmFtZTogSUJNLTEwOTg6IElTTyBGYXJzaQotCWFsaWFzZXM6IFtDcDEwOTgsIGlibTEwOThdCi0yNS4gIENoYXJzZXRuYW1lOiBJQk0tMTExMgotCWRpc3BsYXlOYW1lOiBJQk0tMTExMjogRUJDRElDIEJhbHRpYwotCWFsaWFzZXM6IFtDcDExMTIsIGlibTExMTJdCi0yNi4gIENoYXJzZXRuYW1lOiBJQk0tMTExNAotCWRpc3BsYXlOYW1lOiBJQk0tMTExNDogUEMgU0JDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDExMTQsIGlibTExMTRdCi0yNy4gIENoYXJzZXRuYW1lOiBJQk0tMTExNQotCWRpc3BsYXlOYW1lOiBJQk0tMTExNTogUEMgU0JDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwMTExNSwgaWJtMTExNV0KLTI4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTIyCi0JZGlzcGxheU5hbWU6IElCTS0xMTIyOiBFQkNESUMgRXN0b25pYQotCWFsaWFzZXM6IFtDcDExMjIsIGlibTExMjJdCi0yOS4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMwotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMzogRUJDRElDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTIzLCBpYm0xMTIzXQotMzAuICBDaGFyc2V0bmFtZTogSUJNLTExMjQKLQlkaXNwbGF5TmFtZTogSUJNLTExMjQ6IFBDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTI0LCBpYm0xMTI0XQotMzEuICBDaGFyc2V0bmFtZTogSUJNLTExNDAKLQlkaXNwbGF5TmFtZTogSUJNLTExNDA6IEVCQ0RJQyBVbml0ZWQgU3RhdGVzIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDAsIGlibTExNDBdCi0zMi4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MTogRUJDRElDIEdlcm1hbnkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0MSwgaWJtMTE0MV0KLTMzLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQyCi0JZGlzcGxheU5hbWU6IElCTS0xMTQyOiBFQkNESUMgRGVubWFyaywgTm9yd2F5IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDIsIGlibTExNDJdCi0zNC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MwotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MzogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0MywgQ3AxMTQzXQotMzUuICBDaGFyc2V0bmFtZTogSUJNLTExNDQKLQlkaXNwbGF5TmFtZTogSUJNLTExNDQ6IEVCQ0RJQyBJdGFseSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ0LCBpYm0xMTQ0XQotMzYuICBDaGFyc2V0bmFtZTogSUJNLTExNDUKLQlkaXNwbGF5TmFtZTogSUJNLTExNDU6IEVCQ0RJQyBTcGFpbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0NSwgQ3AxMTQ1XQotMzcuICBDaGFyc2V0bmFtZTogSUJNLTExNDYKLQlkaXNwbGF5TmFtZTogSUJNLTExNDY6IEVCQ0RJQyBVSywgSXJlbGFuZCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ2LCBpYm0xMTQ2XQotMzguICBDaGFyc2V0bmFtZTogSUJNLTExNDcKLQlkaXNwbGF5TmFtZTogSUJNLTExNDc6IEVCQ0RJQyBGcmFuY2UgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NywgaWJtMTE0N10KLTM5LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ4Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ4OiBFQkNESUMgTXVsdGlsaW5ndWFsIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDgsIGlibTExNDhdCi00MC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0OTogRUJDRElDIEljZWxhbmQKLQlhbGlhc2VzOiBbQ3AxMTQ5LCBpYm0xMTQ5XQotNDEuICBDaGFyc2V0bmFtZTogSUJNLTEzNTEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNTE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDEzNTEsIGlibTEzNTFdCi00Mi4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MjogUEMgREJDUy1vbmx5IEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW0NwMTM2MiwgaWJtMTM2Ml0KLTQzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzYzCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzOiBQQyBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjMsIGlibTEzNjNdCi00NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM2M0MKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjNDOiBQQyBLb3JlYSBLUyBleHRlbmRlZCAoc3ludGF4KQotCWFsaWFzZXM6IFtpYm0xMzYzQywgQ3AxMzYzQ10KLTQ1LiAgQ2hhcnNldG5hbWU6IElCTS0xMzY0Ci0JZGlzcGxheU5hbWU6IElCTS0xMzY0OiBFQkNESUMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbaWJtMTM2NCwgQ3AxMzY0XQotNDYuICBDaGFyc2V0bmFtZTogSUJNLTEzNzAKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzA6IFBDIFRhaXdhbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzcwLCBpYm0xMzcwXQotNDcuICBDaGFyc2V0bmFtZTogSUJNLTEzNzEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzE6IEVCQ0RJQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MSwgaWJtMTM3MV0KLTQ4LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgwCi0JZGlzcGxheU5hbWU6IElCTS0xMzgwOiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0IKLQlhbGlhc2VzOiBbaWJtMTM4MCwgQ3AxMzgwXQotNDkuICBDaGFyc2V0bmFtZTogSUJNLTEzODEKLQlkaXNwbGF5TmFtZTogSUJNLTEzODE6IFBDIENoaW5hIEdCCi0JYWxpYXNlczogW0NwMTM4MSwgaWJtMTM4MV0KLTUwLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgyCi0JZGlzcGxheU5hbWU6IElCTS0xMzgyOiBFVUMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODIsIENwMTM4Ml0KLTUxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgzCi0JZGlzcGxheU5hbWU6IElCTS0xMzgzOiBFVUMgQ2hpbmEKLQlhbGlhc2VzOiBbQ3AxMzgzLCBpYm0xMzgzXQotNTIuICBDaGFyc2V0bmFtZTogSUJNLTEzODUKLQlkaXNwbGF5TmFtZTogSUJNLTEzODU6IFBDIERCQ1Mtb25seSBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg1LCBpYm0xMzg1XQotNTMuICBDaGFyc2V0bmFtZTogSUJNLTEzODYKLQlkaXNwbGF5TmFtZTogSUJNLTEzODY6IFBDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtDcDEzODYsIGlibTEzODZdCi01NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4ODogRUJDRElDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtpYm0xMzg4LCBDcDEzODhdCi01NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM5MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM5MDogRUJDRElDIEphcGFuIEthdGFrYW5hIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTAsIGlibTEzOTBdCi01Ni4gIENoYXJzZXRuYW1lOiBJQk0tMTM5OQotCWRpc3BsYXlOYW1lOiBJQk0tMTM5OTogRUJDRElDIEphcGFuIExhdGluIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTksIGlibTEzOTldCi01Ny4gIENoYXJzZXRuYW1lOiBJQk0tMjczCi0JZGlzcGxheU5hbWU6IElCTS0yNzM6IEVCQ0RJQyBHZXJtYW55Ci0JYWxpYXNlczogW2libTI3MywgQ3AyNzNdCi01OC4gIENoYXJzZXRuYW1lOiBJQk0tMjc3Ci0JZGlzcGxheU5hbWU6IElCTS0yNzc6IEVCQ0RJQyBEZW5tYXJrLCBOb3J3YXkKLQlhbGlhc2VzOiBbQ3AyNzcsIGlibTI3N10KLTU5LiAgQ2hhcnNldG5hbWU6IElCTS0yNzgKLQlkaXNwbGF5TmFtZTogSUJNLTI3ODogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbgotCWFsaWFzZXM6IFtpYm0yNzgsIENwMjc4XQotNjAuICBDaGFyc2V0bmFtZTogSUJNLTI4MAotCWRpc3BsYXlOYW1lOiBJQk0tMjgwOiBFQkNESUMgSXRhbHkgCi0JYWxpYXNlczogW2libTI4MCwgQ3AyODBdCi02MS4gIENoYXJzZXRuYW1lOiBJQk0tMjg0Ci0JZGlzcGxheU5hbWU6IElCTS0yODQ6IEVCQ0RJQyBTcGFpbiwgTGF0aW4gQW1lcmljYQotCWFsaWFzZXM6IFtDcDI4NCwgaWJtMjg0XQotNjIuICBDaGFyc2V0bmFtZTogSUJNLTI4NQotCWRpc3BsYXlOYW1lOiBJQk0tMjg1OiBFQkNESUMgVUssIElyZWxhbmQKLQlhbGlhc2VzOiBbQ3AyODUsIGlibTI4NV0KLTYzLiAgQ2hhcnNldG5hbWU6IElCTS0yOTAKLQlkaXNwbGF5TmFtZTogSUJNLTI5MDogRUJDRElDIFNCQ1MgSmFwYW4gS2F0YWthbmEKLQlhbGlhc2VzOiBbQ3AyOTAsIGlibTI5MF0KLTY0LiAgQ2hhcnNldG5hbWU6IElCTS0yOTcKLQlkaXNwbGF5TmFtZTogSUJNLTI5NzogRUJDRElDIEZyYW5jZQotCWFsaWFzZXM6IFtDcDI5NywgaWJtMjk3XQotNjUuICBDaGFyc2V0bmFtZTogSUJNLTMwMAotCWRpc3BsYXlOYW1lOiBJQk0tMzAwOiBFQkNESUMgREJDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMzAwLCBpYm0zMDBdCi02Ni4gIENoYXJzZXRuYW1lOiBJQk0tMzAxCi0JZGlzcGxheU5hbWU6IElCTS0zMDE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtpYm0zMDEsIENwMzAxXQotNjcuICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyCi0JZGlzcGxheU5hbWU6IElCTS0zMzcyMjogRVVDIEphcGFuCi0JYWxpYXNlczogW0NwMzM3MjIsIGlibTMzNzIyXQotNjguICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyQwotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjJDOiBFVUMgSmFwYW4gc3ludGF4Ci0JYWxpYXNlczogW2libTMzNzIyQywgQ3AzMzcyMkNdCi02OS4gIENoYXJzZXRuYW1lOiBJQk0tNDIwCi0JZGlzcGxheU5hbWU6IElCTS00MjA6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3A0MjAsIGlibTQyMF0KLTcwLiAgQ2hhcnNldG5hbWU6IElCTS00MjBTCi0JZGlzcGxheU5hbWU6IElCTS00MjBTOiBFQkNESUMgQXJhYmljIHNoYXBlZAotCWFsaWFzZXM6IFtDcDQyMFMsIGlibTQyMFNdCi03MS4gIENoYXJzZXRuYW1lOiBJQk0tNDI0Ci0JZGlzcGxheU5hbWU6IElCTS00MjQ6IEVCQ0RJQyBIZWJyZXcKLQlhbGlhc2VzOiBbaWJtNDI0LCBDcDQyNF0KLTcyLiAgQ2hhcnNldG5hbWU6IElCTS00MzcKLQlkaXNwbGF5TmFtZTogSUJNLTQzNzogUEMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtDcDQzNywgY3NwYzhjb2RlcGFnZTQzNywgaWJtNDM3XQotNzMuICBDaGFyc2V0bmFtZTogSUJNLTUwMAotCWRpc3BsYXlOYW1lOiBJQk0tNTAwOiBFQkNESUMgTGF0aW4gMQotCWFsaWFzZXM6IFtpYm01MDAsIENwNTAwXQotNzQuICBDaGFyc2V0bmFtZTogSUJNLTczNwotCWRpc3BsYXlOYW1lOiBJQk0tNzM3OiBNUy1ET1MgR3JlZWsKLQlhbGlhc2VzOiBbaWJtNzM3LCBDcDczN10KLTc1LiAgQ2hhcnNldG5hbWU6IElCTS03NzUKLQlkaXNwbGF5TmFtZTogSUJNLTc3NTogTVMtRE9TIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaWJtNzc1LCBDcDc3NV0KLTc2LiAgQ2hhcnNldG5hbWU6IElCTS04MDgKLQlkaXNwbGF5TmFtZTogSUJNLTgwODogUEMgUnVzc2lhbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtODA4LCBDcDgwOF0KLTc3LiAgQ2hhcnNldG5hbWU6IElCTS04MzMKLQlkaXNwbGF5TmFtZTogSUJNLTgzMzogRUJDRElDIFNCQ1MgS29yZWFuCi0JYWxpYXNlczogW2libTgzMywgQ3A4MzNdCi03OC4gIENoYXJzZXRuYW1lOiBJQk0tODM0Ci0JZGlzcGxheU5hbWU6IElCTS04MzQ6IEVCQ0RJQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwODM0LCBpYm04MzRdCi03OS4gIENoYXJzZXRuYW1lOiBJQk0tODM1Ci0JZGlzcGxheU5hbWU6IElCTS04MzU6IEVCQ0RJQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwODM1LCBpYm04MzVdCi04MC4gIENoYXJzZXRuYW1lOiBJQk0tODM2Ci0JZGlzcGxheU5hbWU6IElCTS04MzY6IEVCQ0RJQyBTQkNTIENoaW5hCi0JYWxpYXNlczogW0NwODM2LCBpYm04MzZdCi04MS4gIENoYXJzZXRuYW1lOiBJQk0tODM3Ci0JZGlzcGxheU5hbWU6IElCTS04Mzc6IEVCQ0RJQyBEQkNTLW9ubHkgQ2hpbmEKLQlhbGlhc2VzOiBbQ3A4MzcsIGlibTgzN10KLTgyLiAgQ2hhcnNldG5hbWU6IElCTS04MzgKLQlkaXNwbGF5TmFtZTogSUJNLTgzODogRUJDRElDIFRoYWkKLQlhbGlhc2VzOiBbQ3A4MzgsIGlibTgzOF0KLTgzLiAgQ2hhcnNldG5hbWU6IElCTS04NTAKLQlkaXNwbGF5TmFtZTogSUJNLTg1MDogUEMgTGF0aW4gMQotCWFsaWFzZXM6IFtjc3BjODUwbXVsdGlsaW5ndWFsLCBDcDg1MCwgaWJtODUwXQotODQuICBDaGFyc2V0bmFtZTogSUJNLTg1MgotCWRpc3BsYXlOYW1lOiBJQk0tODUyOiBQQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODUyLCBjc3BjcDg1MiwgaWJtODUyXQotODUuICBDaGFyc2V0bmFtZTogSUJNLTg1NQotCWRpc3BsYXlOYW1lOiBJQk0tODU1OiBQQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtDcDg1NSwgaWJtODU1XQotODYuICBDaGFyc2V0bmFtZTogSUJNLTg1NgotCWRpc3BsYXlOYW1lOiBJQk0tODU2OiBQQyBIZWJyZXcgKG9sZCkKLQlhbGlhc2VzOiBbQ3A4NTYsIGlibTg1Nl0KLTg3LiAgQ2hhcnNldG5hbWU6IElCTS04NTcKLQlkaXNwbGF5TmFtZTogSUJNLTg1NzogUEMgTGF0aW4gNQotCWFsaWFzZXM6IFtjc2libTg1NywgaWJtODU3LCBDcDg1N10KLTg4LiAgQ2hhcnNldG5hbWU6IElCTS04NTgKLQlkaXNwbGF5TmFtZTogSUJNLTg1ODogUEMgTGF0aW4gMSAoZXVybykKLQlhbGlhc2VzOiBbQ3A4NTgsIGlibTg1OF0KLTg5LiAgQ2hhcnNldG5hbWU6IElCTS04NTkKLQlkaXNwbGF5TmFtZTogSUJNLTg1OTogUEMgTGF0aW4gOQotCWFsaWFzZXM6IFtDcDg1OSwgaWJtODU5XQotOTAuICBDaGFyc2V0bmFtZTogSUJNLTg2MAotCWRpc3BsYXlOYW1lOiBJQk0tODYwOiBQQyBQb3J0dWdhbAotCWFsaWFzZXM6IFtpYm04NjAsIENwODYwXQotOTEuICBDaGFyc2V0bmFtZTogSUJNLTg2MQotCWRpc3BsYXlOYW1lOiBJQk0tODYxOiBQQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODYxLCBpYm04NjFdCi05Mi4gIENoYXJzZXRuYW1lOiBJQk0tODYyCi0JZGlzcGxheU5hbWU6IElCTS04NjI6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2MiwgaWJtODYyXQotOTMuICBDaGFyc2V0bmFtZTogSUJNLTg2MwotCWRpc3BsYXlOYW1lOiBJQk0tODYzOiBQQyBDYW5hZGlhbiBGcmVuY2ggCi0JYWxpYXNlczogW2libTg2MywgQ3A4NjNdCi05NC4gIENoYXJzZXRuYW1lOiBJQk0tODY0Ci0JZGlzcGxheU5hbWU6IElCTS04NjQ6IFBDIEFyYWJpYwotCWFsaWFzZXM6IFtpYm04NjQsIENwODY0XQotOTUuICBDaGFyc2V0bmFtZTogSUJNLTg2NFMKLQlkaXNwbGF5TmFtZTogSUJNLTg2NFM6IFBDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm04NjRTLCBDcDg2NFNdCi05Ni4gIENoYXJzZXRuYW1lOiBJQk0tODY1Ci0JZGlzcGxheU5hbWU6IElCTS04NjU6IFBDIE5vcmRpYwotCWFsaWFzZXM6IFtDcDg2NSwgaWJtODY1XQotOTcuICBDaGFyc2V0bmFtZTogSUJNLTg2NgotCWRpc3BsYXlOYW1lOiBJQk0tODY2OiBQQyBSdXNzaWEKLQlhbGlhc2VzOiBbQ3A4NjYsIGlibTg2Nl0KLTk4LiAgQ2hhcnNldG5hbWU6IElCTS04NjcKLQlkaXNwbGF5TmFtZTogSUJNLTg2NzogUEMgSXNyYWVsCi0JYWxpYXNlczogW0NwODY3LCBpYm04NjddCi05OS4gIENoYXJzZXRuYW1lOiBJQk0tODY4Ci0JZGlzcGxheU5hbWU6IElCTS04Njg6IFBDIFVyZHUKLQlhbGlhc2VzOiBbQ3A4NjgsIGlibTg2OF0KLTEwMC4gIENoYXJzZXRuYW1lOiBJQk0tODY5Ci0JZGlzcGxheU5hbWU6IElCTS04Njk6IFBDIEdyZWVjZQotCWFsaWFzZXM6IFtDcDg2OSwgaWJtODY5XQotMTAxLiAgQ2hhcnNldG5hbWU6IElCTS04NzAKLQlkaXNwbGF5TmFtZTogSUJNLTg3MDogRUJDRElDIExhdGluIDIKLQlhbGlhc2VzOiBbQ3A4NzAsIGlibTg3MF0KLTEwMi4gIENoYXJzZXRuYW1lOiBJQk0tODcxCi0JZGlzcGxheU5hbWU6IElCTS04NzE6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODcxLCBpYm04NzFdCi0xMDMuICBDaGFyc2V0bmFtZTogSUJNLTg3NAotCWRpc3BsYXlOYW1lOiBJQk0tODc0OiBQQyBUaGFpCi0JYWxpYXNlczogW2libTg3NCwgQ3A4NzRdCi0xMDQuICBDaGFyc2V0bmFtZTogSUJNLTg3NQotCWRpc3BsYXlOYW1lOiBJQk0tODc1OiBFQkNESUMgR3JlZWsKLQlhbGlhc2VzOiBbQ3A4NzUsIGlibTg3NV0KLTEwNS4gIENoYXJzZXRuYW1lOiBJQk0tODk3Ci0JZGlzcGxheU5hbWU6IElCTS04OTc6IFBDIFNCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDg5NywgaWJtODk3XQotMTA2LiAgQ2hhcnNldG5hbWU6IElCTS05MTgKLQlkaXNwbGF5TmFtZTogSUJNLTkxODogRUJDRElDIFVyZHUKLQlhbGlhc2VzOiBbaWJtOTE4LCBDcDkxOF0KLTEwNy4gIENoYXJzZXRuYW1lOiBJQk0tOTIxCi0JZGlzcGxheU5hbWU6IElCTS05MjE6IFBDIEJhbHRpYwotCWFsaWFzZXM6IFtpYm05MjEsIENwOTIxXQotMTA4LiAgQ2hhcnNldG5hbWU6IElCTS05MjIKLQlkaXNwbGF5TmFtZTogSUJNLTkyMjogUEMgRXN0b25pYW4KLQlhbGlhc2VzOiBbQ3A5MjIsIGlibTkyMl0KLTEwOS4gIENoYXJzZXRuYW1lOiBJQk0tOTI0Ci0JZGlzcGxheU5hbWU6IElCTS05MjQ6IEVCQ0RJQyBMYXRpbiA5Ci0JYWxpYXNlczogW2libTkyNCwgQ3A5MjRdCi0xMTAuICBDaGFyc2V0bmFtZTogSUJNLTkyNwotCWRpc3BsYXlOYW1lOiBJQk0tOTI3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTkyNywgQ3A5MjddCi0xMTEuICBDaGFyc2V0bmFtZTogSUJNLTkzMAotCWRpc3BsYXlOYW1lOiBJQk0tOTMwOiBFQkNESUMgSmFwYW4gREJDUwotCWFsaWFzZXM6IFtDcDkzMCwgaWJtOTMwXQotMTEyLiAgQ2hhcnNldG5hbWU6IElCTS05MzIKLQlkaXNwbGF5TmFtZTogSUJNLTkzMjogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5MzIsIGlibTkzMl0KLTExMy4gIENoYXJzZXRuYW1lOiBJQk0tOTMzCi0JZGlzcGxheU5hbWU6IElCTS05MzM6IEVCQ0RJQyBLb3JlYSBEQkNTCi0JYWxpYXNlczogW0NwOTMzLCBpYm05MzNdCi0xMTQuICBDaGFyc2V0bmFtZTogSUJNLTkzNQotCWRpc3BsYXlOYW1lOiBJQk0tOTM1OiBFQkNESUMgQ2hpbmEgREJDUwotCWFsaWFzZXM6IFtDcDkzNSwgaWJtOTM1XQotMTE1LiAgQ2hhcnNldG5hbWU6IElCTS05MzcKLQlkaXNwbGF5TmFtZTogSUJNLTkzNzogRUJDRElDIFRhaXdhbiBEQkNTCi0JYWxpYXNlczogW0NwOTM3LCBpYm05MzddCi0xMTYuICBDaGFyc2V0bmFtZTogSUJNLTkzOQotCWRpc3BsYXlOYW1lOiBJQk0tOTM5OiBFQkNESUMgSmFwYW4gRXh0ZW5kZWQgREJDUwotCWFsaWFzZXM6IFtDcDkzOSwgaWJtOTM5XQotMTE3LiAgQ2hhcnNldG5hbWU6IElCTS05NDIKLQlkaXNwbGF5TmFtZTogSUJNLTk0MjogUEMgSmFwYW4gU0pJUy03OAotCWFsaWFzZXM6IFtpYm05NDIsIENwOTQyXQotMTE4LiAgQ2hhcnNldG5hbWU6IElCTS05NDJDCi0JZGlzcGxheU5hbWU6IElCTS05NDJDOiBQQyBKYXBhbiBTSklTLTc4IHN5bnRheAotCWFsaWFzZXM6IFtpYm05NDJDLCBDcDk0MkNdCi0xMTkuICBDaGFyc2V0bmFtZTogSUJNLTk0MwotCWRpc3BsYXlOYW1lOiBJQk0tOTQzOiBQQyBKYXBhbiBTSklTLTkwCi0JYWxpYXNlczogW2libTk0MywgQ3A5NDNdCi0xMjAuICBDaGFyc2V0bmFtZTogSUJNLTk0M0MKLQlkaXNwbGF5TmFtZTogSUJNLTk0M0M6IFBDIEphcGFuIFNKSVMtOTAgc3ludGF4Ci0JYWxpYXNlczogW0NwOTQzQywgaWJtOTQzQ10KLTEyMS4gIENoYXJzZXRuYW1lOiBJQk0tOTQ3Ci0JZGlzcGxheU5hbWU6IElCTS05NDc6IFBDIERCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTQ3LCBDcDk0N10KLTEyMi4gIENoYXJzZXRuYW1lOiBJQk0tOTQ4Ci0JZGlzcGxheU5hbWU6IElCTS05NDg6IFBDIFRhaXdhbiBTQUEKLQlhbGlhc2VzOiBbaWJtOTQ4LCBDcDk0OF0KLTEyMy4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5Ci0JZGlzcGxheU5hbWU6IElCTS05NDk6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDksIGlibTk0OV0KLTEyNC4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5QwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5QzogUEMgS29yZWEgKEtTKQotCWFsaWFzZXM6IFtDcDk0OUMsIGlibTk0OUNdCi0xMjUuICBDaGFyc2V0bmFtZTogSUJNLTk1MAotCWRpc3BsYXlOYW1lOiBJQk0tOTUwOiBQQyBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTUwLCBDcDk1MF0KLTEyNi4gIENoYXJzZXRuYW1lOiBJQk0tOTUxCi0JZGlzcGxheU5hbWU6IElCTS05NTE6IFBDIERCQ1Mtb25seSBLb3JlYW4KLQlhbGlhc2VzOiBbQ3A5NTEsIGlibTk1MV0KLTEyNy4gIENoYXJzZXRuYW1lOiBJQk0tOTU0Ci0JZGlzcGxheU5hbWU6IElCTS05NTQ6IEVVQyBKYXBhbiAoZnVsbCkKLQlhbGlhc2VzOiBbQ3A5NTQsIGlibTk1NF0KLTEyOC4gIENoYXJzZXRuYW1lOiBJQk0tOTU0QwotCWRpc3BsYXlOYW1lOiBJQk0tOTU0QzogRVVDIEphcGFuIChmdWxsKSB3aXRoIHN5bnRheAotCWFsaWFzZXM6IFtDcDk1NGMsIGlibS1ldWNqcF0KLTEyOS4gIENoYXJzZXRuYW1lOiBJQk0tOTY0Ci0JZGlzcGxheU5hbWU6IElCTS05NjQ6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbQ3A5NjQsIGlibS1ldWN0d10KLTEzMC4gIENoYXJzZXRuYW1lOiBJQk0tOTcxCi0JZGlzcGxheU5hbWU6IElCTS05NzE6IEVVQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTcxLCBpYm05NzFdCi0xMzEuICBDaGFyc2V0bmFtZTogSVNDSUk5MQotCWRpc3BsYXlOYW1lOiBJU0NJSTkxOiBJU0NJSSBEZXZlbmFnYXJpIDkxCi0JYWxpYXNlczogW2lzY2lpXQotMTMyLiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUNOCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUNOOiBJU08gMjAyMiBUcmFkaXRpb25hbCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjItY24tY25zLCBpc28tMjAyMi1jbi1jbnMsIGlzbzIwMjJjbi1jbnMsIGlzbzIwMjJjbiwgaXNvMjAyMi1jbl0KLTEzMy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTi1HQgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTi1HQjogSVNPIDIwMjIgU2ltcGxpZmllZCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjJjbi1nYiwgaXNvMjAyMi1jbi1nYl0KLTEzNC4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUDogSVNPIDIwMjIgSmFwYW4KLQlhbGlhc2VzOiBbamlzLCBjc2lzbzIwMjJqcDIsIGlzbzIwMjItanAsIGNzamlzZW5jb2RpbmcsIGppcy1lbmNvZGluZywgaXNvLTIwMjItanAyLCBpc28yMDIyanBdCi0xMzUuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1I6IElTTyAyMDIyIEtvcmVhCi0JYWxpYXNlczogW2lzbzIwMjIta3IsIGNzaXNvMjAyMmtyLCBpc28yMDIya3JdCi0xMzYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xOiBJU08gTGF0aW4gMSAtIFdlc3Rlcm4gRXVyb3BlCi0JYWxpYXNlczogW2NzaXNvbGF0aW4xLCBpc28taXItMTAwLCBpc284ODU5LTEsIGlibS04MTksIGlzbzg4NTlfMSwgbGF0aW4xLCA4ODU5LTEsIGlibTgxOSwgaXNvLTg4NTktMToxOTg3LCBDcDgxOSwgbDFdCi0xMzcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTAKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTA6IElTTyBMYXRpbiA2IC0gTm9yZGljCi0JYWxpYXNlczogW2lzbzg4NTktMTAsIElTT184ODU5LTEwOjE5OTIsIGxhdGluNiwgaWJtLTkxOSwgODg1OS0xMCwgaXNvLWlyLTE1NywgbDYsIGlzbzg4NTlfMTAsIGNzaXNvbGF0aW42XQotMTM4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzOiBJU08gTGF0aW4gNyAtIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaXNvODg1OS0xMywgaXNvODg1OV8xMywgODg1OS0xM10KLTEzOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNDogSVNPIExhdGluIDggLSBDZWx0aWMKLQlhbGlhc2VzOiBbODg1OS0xNCwgaXNvODg1OV8xNCwgaXNvLWlyLTE5OSwgSVNPXzg4NTktMTQ6MTk5OCwgbGF0aW44LCBpc284ODU5LTE0LCBpc29jZWx0aWMsIGw4XQotMTQwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE1Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE1OiBJU08gTGF0aW4gOSAtIEV1cm8KLQlhbGlhc2VzOiBbbDksIGlibTkyMywgY3Npc29sYXRpbjksIDg4NTktOSwgaXNvODg1OS0xNSwgaWJtLTkyMywgbGF0aW45LCBpc284ODU5XzE1LCBDcDkyMywgaXNvODg1OV8xNV9mZGlzLCBsYXRpbjBdCi0xNDEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTY6IElTTyBSb21hbmlhbgotCWFsaWFzZXM6IFtpc284ODU5XzE2LCBpc284ODU5LTE2LCA4ODU5LTE2XQotMTQyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMjogSVNPIExhdGluIDIgLSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm05MTIsIGwyLCBpYm0tOTEyLCBpc28taXItMTAxLCBjc2lzb2xhdGluMiwgaXNvLTg4NTktMjoxOTg3LCBsYXRpbjIsIGlzbzg4NTlfMiwgQ3A5MTIsIGlzbzg4NTktMiwgODg1OS0yXQotMTQzLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMzogSVNPIExhdGluIDMgLSBMYXRpbi9Fc3BlcmFudG8KLQlhbGlhc2VzOiBbaXNvLTg4NTktMzoxOTg4LCBjc2lzb2xhdGluMywgaXNvODg1OV8zLCA4ODU5LTMsIGlzbzg4NTktMywgQ3A5MTMsIGlzby1pci0xMDksIGlibS05MTMsIGwzLCBsYXRpbjNdCi0xNDQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00OiBJU08gTGF0aW4gNCAtIEJhbHRpYwotCWFsaWFzZXM6IFtpc28taXItMTEwLCBDcDkxNCwgbDQsIGlibS05MTQsIGxhdGluNCwgaXNvODg1OV80LCBpc28tODg1OS00OjE5ODgsIGlzbzg4NTktNCwgODg1OS00LCBjc2lzb2xhdGluNF0KLTE0NS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTU6IElTTyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpc284ODU5XzUsIDg4NTktNSwgaWJtOTE1LCBpc28tODg1OS01OjE5ODgsIGNzaXNvbGF0aW5jeXJpbGxpYywgY3lyaWxsaWMsIENwOTE1LCBpc28taXItMTQ0LCBpc284ODU5LTUsIGlibS05MTVdCi0xNDYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02OiBJU08gQXJhYmljCi0JYWxpYXNlczogW2lzby1pci0xMjcsIGNzaXNvbGF0aW5hcmFiaWMsIGlzbzg4NTktNiwgaWJtMTA4OSwgZWNtYS0xMTQsIGFzbW8tNzA4LCBhcmFiaWMsIGlibS0xMDg5LCBpc284ODU5XzYsIDg4NTktNiwgQ3AxMDg5LCBpc28tODg1OS02OjE5ODddCi0xNDcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNlMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNlM6IElTTyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaXNvODg1OS02UywgaXNvODg1OV82U10KLTE0OC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS03Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTc6IElTTyBHcmVlawotCWFsaWFzZXM6IFtpc28tODg1OS03OjE5ODcsIENwODEzLCA4ODU5LTcsIGlzby1pci0xMjYsIGlibS04MTMsIGlzbzg4NTlfNywgZWNtYS0xMTgsIGdyZWVrOCwgaWJtODEzLCBlbG90LTkyOCwgY3Npc29sYXRpbmdyZWVrLCBpc284ODU5LTcsIGdyZWVrXQotMTQ5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktODogSVNPIEhlYnJldwotCWFsaWFzZXM6IFtpc28taXItMTM4LCBpc284ODU5LTgsIGlibS05MTYsIGlzbzg4NTlfOCwgY3Npc29sYXRpbmhlYnJldywgaGVicmV3LCBpc28tODg1OS04OjE5ODgsIGlibTkxNiwgQ3A5MTYsIDg4NTktOF0KLTE1MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTk6IElTTyBMYXRpbiA1IC0gVHVya2V5Ci0JYWxpYXNlczogW0NwOTIwLCBsYXRpbjUsIGlzby1pci0xNDgsIDg4NTktOSwgbDUsIGNzaXNvbGF0aW41LCBpYm0tOTIwLCBpYm05MjAsIGlzbzg4NTlfOSwgaXNvODg1OS05XQotMTUxLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDEKLQlkaXNwbGF5TmFtZTogSklTMDIwMTogSmFwYW4gSklTIDAyMDEgKGthdGFrYW5hKQotCWFsaWFzZXM6IFtdCi0xNTIuICBDaGFyc2V0bmFtZTogSklTMDIwOAotCWRpc3BsYXlOYW1lOiBKSVMwMjA4OiBKYXBhbiBKSVMgMDIwOAotCWFsaWFzZXM6IFtdCi0xNTMuICBDaGFyc2V0bmFtZTogSklTMDIxMgotCWRpc3BsYXlOYW1lOiBKSVMwMjEyOiBKYXBhbiBKSVMgMDIxMiAoZXh0ZW5kZWQpCi0JYWxpYXNlczogW10KLTE1NC4gIENoYXJzZXRuYW1lOiBKb2hhYgotCWRpc3BsYXlOYW1lOiBKb2hhYjogUEMgS29yZWFuIEpvaGFiCi0JYWxpYXNlczogW10KLTE1NS4gIENoYXJzZXRuYW1lOiBLT0k4LVIKLQlkaXNwbGF5TmFtZTogS09JOC1SOiBJbnRlcm5ldCBSdXNzaWEKLQlhbGlhc2VzOiBbaWJtLTg3OCwgY3Nrb2k4ciwga29pOCwga29pOF9yXQotMTU2LiAgQ2hhcnNldG5hbWU6IEtPSTgtUlUKLQlkaXNwbGF5TmFtZTogS09JOC1SVTogSW50ZXJuZXQgQmVsYXJ1cwotCWFsaWFzZXM6IFtpYm0tMTE2OCwga29pOF9ydV0KLTE1Ny4gIENoYXJzZXRuYW1lOiBLT0k4LVUKLQlkaXNwbGF5TmFtZTogS09JOC1VOiBJbnRlcm5ldCBVa3JhaW5lCi0JYWxpYXNlczogW2libS0xMTY3LCBrb2k4X3VdCi0xNTguICBDaGFyc2V0bmFtZTogS1NDNTYwMQotCWRpc3BsYXlOYW1lOiBLU0M1NjAxOiBLb3JlYSBLU0MKLQlhbGlhc2VzOiBbXQotMTU5LiAgQ2hhcnNldG5hbWU6IE1hY0FyYWJpYwotCWRpc3BsYXlOYW1lOiBNYWNBcmFiaWM6IEFwcGxlIEFyYWJpYwotCWFsaWFzZXM6IFtdCi0xNjAuICBDaGFyc2V0bmFtZTogTWFjQ2VudHJhbEV1cm9wZQotCWRpc3BsYXlOYW1lOiBNYWNDZW50cmFsRXVyb3BlOiBBcHBsZSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm0tMTI4Ml0KLTE2MS4gIENoYXJzZXRuYW1lOiBNYWNDcm9hdGlhbgotCWRpc3BsYXlOYW1lOiBNYWNDcm9hdGlhbjogQXBwbGUgQ3JvYXRpYW4gCi0JYWxpYXNlczogW2libS0xMjg0XQotMTYyLiAgQ2hhcnNldG5hbWU6IE1hY0N5cmlsbGljCi0JZGlzcGxheU5hbWU6IE1hY0N5cmlsbGljOiBBcHBsZSBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0tMTI4M10KLTE2My4gIENoYXJzZXRuYW1lOiBNYWNEaW5nYmF0Ci0JZGlzcGxheU5hbWU6IE1hY0RpbmdiYXQ6IEFwcGxlIERpbmdiYXQKLQlhbGlhc2VzOiBbXQotMTY0LiAgQ2hhcnNldG5hbWU6IE1hY0dyZWVrCi0JZGlzcGxheU5hbWU6IE1hY0dyZWVrOiBBcHBsZSBHcmVlawotCWFsaWFzZXM6IFtpYm0tMTI4MF0KLTE2NS4gIENoYXJzZXRuYW1lOiBNYWNIZWJyZXcKLQlkaXNwbGF5TmFtZTogTWFjSGVicmV3OiBBcHBsZSBIZWJyZXcgCi0JYWxpYXNlczogW10KLTE2Ni4gIENoYXJzZXRuYW1lOiBNYWNJY2VsYW5kCi0JZGlzcGxheU5hbWU6IE1hY0ljZWxhbmQ6IEFwcGxlIEljZWxhbmQKLQlhbGlhc2VzOiBbaWJtLTEyODZdCi0xNjcuICBDaGFyc2V0bmFtZTogTWFjUm9tYW4KLQlkaXNwbGF5TmFtZTogTWFjUm9tYW46IEFwcGxlIFJvbWFuCi0JYWxpYXNlczogW2libS0xMjc1XQotMTY4LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuaWEKLQlkaXNwbGF5TmFtZTogTWFjUm9tYW5pYTogQXBwbGUgUm9tYW5pYQotCWFsaWFzZXM6IFtpYm0tMTI4NV0KLTE2OS4gIENoYXJzZXRuYW1lOiBNYWNTeW1ib2wKLQlkaXNwbGF5TmFtZTogTWFjU3ltYm9sOiBBcHBsZSBQb3N0U2NyaXB0IFN5bWJvbAotCWFsaWFzZXM6IFtBZG9iZS1TeW1ib2wtRW5jb2RpbmcsIGlibS0xMDM4XQotMTcwLiAgQ2hhcnNldG5hbWU6IE1hY1RoYWkKLQlkaXNwbGF5TmFtZTogTWFjVGhhaTogQXBwbGUgVGhhaQotCWFsaWFzZXM6IFtdCi0xNzEuICBDaGFyc2V0bmFtZTogTWFjVHVya2lzaAotCWRpc3BsYXlOYW1lOiBNYWNUdXJraXNoOiBBcHBsZSBUdXJraXNoCi0JYWxpYXNlczogW2libS0xMjgxXQotMTcyLiAgQ2hhcnNldG5hbWU6IE1hY1VrcmFpbmUKLQlkaXNwbGF5TmFtZTogTWFjVWtyYWluZTogQXBwbGUgVWtyYWluZQotCWFsaWFzZXM6IFtdCi0xNzMuICBDaGFyc2V0bmFtZTogUFRDUDE1NAotCWRpc3BsYXlOYW1lOiBQVENQMTU0OiBXaW5kb3dzIEN5cmlsbGljIEFzaWFuCi0JYWxpYXNlczogW0lCTS0xMTY5LCBjc1BUQ1AxNTQsIEN5cmlsbGljLUFzaWFuLCBQVDE1NF0KLTE3NC4gIENoYXJzZXRuYW1lOiBTaGlmdF9KSVMKLQlkaXNwbGF5TmFtZTogU2hpZnRfSklTOiBTaGlmdCBKSVMgSmFwYW4KLQlhbGlhc2VzOiBbXQotMTc1LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMDogUEMgVGhhaWxhbmQKLQlhbGlhc2VzOiBbdGlzNjIwLjI1MzMsIHRpczYyMF0KLTE3Ni4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSTogQVNDSUkgNyBiaXQKLQlhbGlhc2VzOiBbaXNvLTY0Ni5pcnY6MTk4MywgSVNPNjQ2LVVTLCBBU0NJSSwgZGVmYXVsdCwgSVNPLTY0Ni5pcnY6MTk5MSwgZGlyZWN0LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIGlibS0zNjcsIDY0NiwgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIENwMzY3XQotMTc3LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVW5pY29kZSwgVVRGMTYsIFVURl8xNiwgVUNTLTJdCi0xNzguICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkU6IFVuaWNvZGUgVVRGLTE2IEJpZy1lbmRpYW4KLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVW5pY29kZUJpZ1VubWFya2VkLCBVVEYxNkJFLCBVVEZfMTZCRSwgSVNPLTEwNjQ2LVVDUy0yXQotMTc5LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8xNkxFLCBVVEYxNkxFLCBVbmljb2RlTGl0dGxlVW5tYXJrZWQsIFgtVVRGLTE2TEVdCi0xODAuICBDaGFyc2V0bmFtZTogVVRGLTMyCi0JZGlzcGxheU5hbWU6IFVURi0zMjogVW5pY29kZSBVVEYtMzIKLQlhbGlhc2VzOiBbSVNPLTEwNjQ2LVVDUy00LCBVVEYzMiwgVUNTLTQsIFVURl8zMkJFXQotMTgxLiAgQ2hhcnNldG5hbWU6IFVURi0zMkJFCi0JZGlzcGxheU5hbWU6IFVURi0zMkJFOiBVbmljb2RlIFVURi0zMiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1VURjMyQkUsIFgtVVRGLTMyQkUsIFVURl8zMkJFXQotMTgyLiAgQ2hhcnNldG5hbWU6IFVURi0zMkxFCi0JZGlzcGxheU5hbWU6IFVURi0zMkxFOiBVbmljb2RlIFVURi0zMiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8zMkxFLCBVVEYzMkxFLCBYLVVURi0zMkxFXQotMTgzLiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04OiBVbmljb2RlIFVURi04Ci0JYWxpYXNlczogW1VURl84LCBVVEY4XQotMTg0LiAgQ2hhcnNldG5hbWU6IFVURi04SgotCWRpc3BsYXlOYW1lOiBVVEYtOEo6IFVuaWNvZGUgVVRGLTggKEphdmEpCi0JYWxpYXNlczogW1VURjhKXQotMTg1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTA6IFdpbmRvd3MgTGF0aW4gMgotCWFsaWFzZXM6IFtpYm0tMTI1MCwgQ3AxMjUwXQotMTg2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTE6IFdpbmRvd3MgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyNTEsIENwMTI1MV0KLTE4Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyOiBXaW5kb3dzIExhdGluIDEgCi0JYWxpYXNlczogW0NwMTI1MiwgaWJtLTEyNTJdCi0xODguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUzCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MzogV2luZG93cyBHcmVlawotCWFsaWFzZXM6IFtDcDEyNTMsIGlibS0xMjUzXQotMTg5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQ6IFdpbmRvd3MgTGF0aW4gNSAoVHVya2V5KQotCWFsaWFzZXM6IFtDcDEyNTQsIGlibS0xMjU0XQotMTkwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTU6IFdpbmRvd3MgSGVicmV3Ci0JYWxpYXNlczogW0NwMTI1NSwgaWJtLTEyNTVdCi0xOTEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NjogV2luZG93cyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3AxMjU2LCBpYm0tMTI1Nl0KLTE5Mi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTZTCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NlM6IFdpbmRvd3MgQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2libS0xMjU2cywgQ3AxMjU2c10KLTE5My4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTcKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU3OiBXaW5kb3dzIExhdGluIDQgKEJhbHR0aWMpCi0JYWxpYXNlczogW0NwMTI1NywgaWJtLTEyNTddCi0xOTQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1ODogV2luZG93cyBWaWV0bmFtZXNlCi0JYWxpYXNlczogW2libS0xMTI5LCBpYm0tMTI1OCwgQ3AxMjU4XQotMTk1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtODc0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtODc0OiBXaW5kb3dzIFRoYWkKLQlhbGlhc2VzOiBbTVM4NzRdCi0xOTYuICBDaGFyc2V0bmFtZTogd2luZG93cy05MzIKLQlkaXNwbGF5TmFtZTogd2luZG93cy05MzI6IFdpbmRvd3MgSmFwYW4KLQlhbGlhc2VzOiBbbXNfa2FuamksIGNzd2luZG93czMxaiwgTVM5MzIsIHdpbmRvd3MtMzFqXQotMTk3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTM2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTM2OiBXaW5kb3dzIENoaW5hCi0JYWxpYXNlczogW01TOTM2LCA5MzZdCi0xOTguICBDaGFyc2V0bmFtZTogd2luZG93cy05NDkKLQlkaXNwbGF5TmFtZTogd2luZG93cy05NDk6IFdpbmRvd3MgS29yZWEKLQlhbGlhc2VzOiBbaWJtLTEzNjEsIENwMTM2MSwgaWJtMTM2MSwgTVM5NDksIG1zMTM2MSwga3NjNTYwMS0xOTkyXQotMTk5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTUwOiBXaW5kb3dzIFRhaXdhbgotCWFsaWFzZXM6IFtNUzk1MF0KLTIwMC4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVCaWcKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlQmlnOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlQmlnXQotMjAxLiAgQ2hhcnNldG5hbWU6IFgtVW5pY29kZUxpdHRsZQotCWRpc3BsYXlOYW1lOiBYLVVuaWNvZGVMaXR0bGU6IFVuaWNvZGUgVVRGLTE2IExpdHRsZS1lbmRpYW4gd2l0aCBtYXJrCi0JYWxpYXNlczogW1VuaWNvZGVMaXR0bGVdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5MjJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiAxLjQuMl8wMyAoMS40LjJfMDMtYjAyKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLnJ1bnRpbWUubmFtZT1KYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kLi4uCi1zdW4uYm9vdC5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxiaW4KLWphdmEudm0udmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEudm0udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly9qYXZhLnN1bi5jb20vCi1wYXRoLnNlcGFyYXRvcj07Ci1qYXZhLnZtLm5hbWU9SmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yXzAzLWIwMgotamF2YS5hd3QuZ3JhcGhpY3NlbnY9c3VuLmF3dC5XaW4zMkdyYXBoaWNzRW52aXJvbm1lbnQKLWphdmEuZW5kb3JzZWQuZGlycz1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxlbmRvcnNlZAotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcYmluOy47QzpcV0lORE9XLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotZmlsZS5lbmNvZGluZz1DcDEyNTIKLWphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuNAotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmUKLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1taXhlZCBtb2RlCi1qYXZhLnZlcnNpb249MS40LjJfMDMKLWphdmEuZXh0LmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZXh0Ci1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXHJ0LmphcjsuLi4KLWphdmEudmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz1odHRwOi8vamF2YS5zdW4uY29tL2NnaS1iaW4vYnVncmVwb3J0Li4uCi1zdW4uY3B1LmVuZGlhbj1saXR0bGUKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLXN1bi5jcHUuaXNhbGlzdD1wZW50aXVtIGk0ODYgaTM4NgotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWhpX0lOCi1pdwotaXdfSUwKLWphCi1qYV9KUAota28KLWtvX0tSCi10aAotdGhfVEgKLXRoX1RIX1RICi16aAotemhfQ04KLXpoX0hLCi16aF9UVwotYmUKLWJlX0JZCi1iZwotYmdfQkcKLWNhCi1jYV9FUwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRlCi1kZV9BVAotZGVfQ0gKLWRlX0RFCi1kZV9MVQotZWwKLWVsX0dSCi1lbl9BVQotZW5fQ0EKLWVuX0dCCi1lbl9JRQotZW5fSU4KLWVuX05aCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZnIKLWZyX0JFCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9MVQotaHIKLWhyX0hSCi1odQotaHVfSFUKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbmwKLW5sX0JFCi1ubF9OTAotbm8KLW5vX05PCi1ub19OT19OWQotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotdHIKLXRyX1RSCi11awotdWtfVUEKLWVuCi1lbl9VUwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNQotCWFsaWFzZXM6IFtjc0JpZzVdCi0yLiAgQ2hhcnNldG5hbWU6IEJpZzUtSEtTQ1MKLQlkaXNwbGF5TmFtZTogQmlnNS1IS1NDUwotCWFsaWFzZXM6IFtiaWc1LWhrc2NzLCBCaWc1X0hLU0NTLCBiaWc1aGtzY3NdCi0zLiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlAKLQlhbGlhc2VzOiBbZXVjamlzLCB4LWV1Y2pwLCBjc0VVQ1BrZEZtdGphcGFuZXNlLCBldWNqcCwgRXh0ZW5kZWRfVU5JWF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNlLCB4LWV1Yy1qcCwgZXVjX2pwXQotNC4gIENoYXJzZXRuYW1lOiBFVUMtS1IKLQlkaXNwbGF5TmFtZTogRVVDLUtSCi0JYWxpYXNlczogW2tzYzU2MDEsIDU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGtzYzU2MDEtMTk4NywgZXVjX2tyLCBrc19jXzU2MDEtMTk4NywgZXVja3IsIGNzRVVDS1JdCi01LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMAotCWFsaWFzZXM6IFtnYjE4MDMwLTIwMDBdCi02LiAgQ2hhcnNldG5hbWU6IEdCSwotCWRpc3BsYXlOYW1lOiBHQksKLQlhbGlhc2VzOiBbd2luZG93cy05MzYsIENQOTM2XQotNy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUAotCWFsaWFzZXM6IFtqaXMsIGppc19lbmNvZGluZywgY3NqaXNlbmNvZGluZywgY3NJU08yMDIySlAsIGlzbzIwMjJqcF0KLTguICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1IKLQlhbGlhc2VzOiBbSVNPMjAyMktSLCBjc0lTTzIwMjJLUl0KLTkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xCi0JYWxpYXNlczogW2lzby1pci0xMDAsIDg4NTlfMSwgSVNPXzg4NTktMSwgSVNPODg1OV8xLCA4MTksIGNzSVNPTGF0aW4xLCBJQk0tODE5LCBJU09fODg1OS0xOjE5ODcsIGxhdGluMSwgY3A4MTksIElTTzg4NTktMSwgSUJNODE5LCBJU09fODg1OV8xLCBsMV0KLTEwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzCi0JYWxpYXNlczogW2lzbzg4NTlfMTNdCi0xMS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNQotCWFsaWFzZXM6IFs4ODU5XzE1LCBjc0lTT2xhdGluOSwgSUJNOTIzLCBjcDkyMywgOTIzLCBMOSwgSUJNLTkyMywgSVNPODg1OS0xNSwgTEFUSU45LCBJU09fODg1OS0xNSwgTEFUSU4wLCBjc0lTT2xhdGluMCwgSVNPODg1OV8xNV9GRElTLCBJU08tODg1OS0xNV0KLTEyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMgotCWFsaWFzZXM6IFtsMiwgaXNvLWlyLTEwMSwgSVNPXzg4NTktMjoxOTg3LCBJU09fODg1OS0yLCBsYXRpbjIsIGNzSVNPTGF0aW4yLCBpc284ODU5XzJdCi0xMy4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTMKLQlhbGlhc2VzOiBbXQotMTQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00Ci0JYWxpYXNlczogW2lzby1pci0xMTAsIGw0LCBsYXRpbjQsIGNzSVNPTGF0aW40LCBpc284ODU5XzQsIElTT184ODU5LTQ6MTk4OCwgSVNPXzg4NTktNF0KLTE1LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNQotCWFsaWFzZXM6IFtjeXJpbGxpYywgaXNvODg1OV81LCBJU09fODg1OS01LCBpc28taXItMTQ0LCBjc0lTT0xhdGluQ3lyaWxsaWNdCi0xNi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS02Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTYKLQlhbGlhc2VzOiBbXQotMTcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03Ci0JYWxpYXNlczogW2dyZWVrOCwgRUNNQS0xMTgsIHN1bl9ldV9ncmVlaywgRUxPVF85MjgsIElTT184ODU5LTc6MTk4NywgaXNvLWlyLTEyNiwgSVNPXzg4NTktNywgaXNvODg1OV83LCBncmVlaywgY3NJU09MYXRpbkdyZWVrXQotMTguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS04Ci0JYWxpYXNlczogW10KLTE5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTkKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOQotCWFsaWFzZXM6IFtpc28taXItMTQ4LCBsYXRpbjUsIGw1LCBJU09fODg1OS05LCBJU09fODg1OS05OjE5ODksIGNzSVNPTGF0aW41LCBpc284ODU5XzldCi0yMC4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMDEKLQlkaXNwbGF5TmFtZTogSklTX1gwMjAxCi0JYWxpYXNlczogW0pJU19YMDIwMSwgWDAyMDEsIEpJUzAyMDEsIGNzSGFsZldpZHRoS2F0YWthbmFdCi0yMS4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMTItMTk5MAotCWRpc3BsYXlOYW1lOiBKSVNfWDAyMTItMTk5MAotCWFsaWFzZXM6IFtqaXNfeDAyMTItMTk5MCwgaXNvLWlyLTE1OSwgeDAyMTIsIEpJUzAyMTIsIGNzSVNPMTU5SklTWDAyMTIxOTkwXQotMjIuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUgotCWFsaWFzZXM6IFtrb2k4LCBjc2tvaThyXQotMjMuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUwotCWFsaWFzZXM6IFtzaGlmdC1qaXMsIHgtc2ppcywgbXNfa2FuamksIHNoaWZ0X2ppcywgY3NTaGlmdEpJUywgc2ppcywgcGNrXQotMjQuICBDaGFyc2V0bmFtZTogVElTLTYyMAotCWRpc3BsYXlOYW1lOiBUSVMtNjIwCi0JYWxpYXNlczogW10KLTI1LiAgQ2hhcnNldG5hbWU6IFVTLUFTQ0lJCi0JZGlzcGxheU5hbWU6IFVTLUFTQ0lJCi0JYWxpYXNlczogW0lTTzY0Ni1VUywgSUJNMzY3LCBBU0NJSSwgY3AzNjcsIGFzY2lpNywgQU5TSV9YMy40LTE5ODYsIGlzby1pci02LCB1cywgNjQ2LCBpc29fNjQ2LmlydjoxOTgzLCBjc0FTQ0lJLCBBTlNJX1gzLjQtMTk2OCwgSVNPXzY0Ni5pcnY6MTk5MV0KLTI2LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVVRGXzE2XQotMjcuICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkUKLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTI4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFCi0JYWxpYXNlczogW1VURl8xNkxFLCBYLVVURi0xNkxFXQotMjkuICBDaGFyc2V0bmFtZTogVVRGLTgKLQlkaXNwbGF5TmFtZTogVVRGLTgKLQlhbGlhc2VzOiBbVVRGOF0KLTMwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTAKLQlhbGlhc2VzOiBbY3AxMjUwXQotMzEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUxCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MQotCWFsaWFzZXM6IFtjcDEyNTFdCi0zMi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyCi0JYWxpYXNlczogW2NwMTI1Ml0KLTMzLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTMKLQlhbGlhc2VzOiBbY3AxMjUzXQotMzQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NAotCWFsaWFzZXM6IFtjcDEyNTRdCi0zNS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1Ci0JYWxpYXNlczogW10KLTM2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTYKLQlhbGlhc2VzOiBbXQotMzcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NwotCWFsaWFzZXM6IFtjcDEyNTddCi0zOC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTgKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU4Ci0JYWxpYXNlczogW10KLTM5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMzFqCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMzFqCi0JYWxpYXNlczogW2NzV2luZG93czMxSiwgd2luZG93cy05MzIsIE1TOTMyXQotNDAuICBDaGFyc2V0bmFtZTogeC1FVUMtQ04KLQlkaXNwbGF5TmFtZTogeC1FVUMtQ04KLQlhbGlhc2VzOiBbZ2IyMzEyLCBFVUNfQ04sIGV1Y2NuLCBldWMtY24sIGdiMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi00MS4gIENoYXJzZXRuYW1lOiB4LWV1Yy1qcC1saW51eAotCWRpc3BsYXlOYW1lOiB4LWV1Yy1qcC1saW51eAotCWFsaWFzZXM6IFtldWNfanBfbGludXgsIGV1Yy1qcC1saW51eF0KLTQyLiAgQ2hhcnNldG5hbWU6IHgtRVVDLVRXCi0JZGlzcGxheU5hbWU6IHgtRVVDLVRXCi0JYWxpYXNlczogW2NuczExNjQzLCBldWNfdHcsIEVVQy1UVywgZXVjdHddCi00My4gIENoYXJzZXRuYW1lOiB4LUlTQ0lJOTEKLQlkaXNwbGF5TmFtZTogeC1JU0NJSTkxCi0JYWxpYXNlczogW2lzY2lpLCBTVF9TRVZfMzU4LTg4LCBpc28taXItMTUzLCBjc0lTTzE1M0dPU1QxOTc2ODc0LCBJU0NJSTkxXQotNDQuICBDaGFyc2V0bmFtZTogeC1KSVMwMjA4Ci0JZGlzcGxheU5hbWU6IHgtSklTMDIwOAotCWFsaWFzZXM6IFtKSVNfQzY2MjYtMTk4MywgSklTMDIwOCwgY3NJU084N0pJU1gwMjA4LCB4MDIwOCwgSklTX1gwMjA4LTE5ODMsIGlzby1pci04N10KLTQ1LiAgQ2hhcnNldG5hbWU6IHgtSm9oYWIKLQlkaXNwbGF5TmFtZTogeC1Kb2hhYgotCWFsaWFzZXM6IFtqb2hhYiwgbXMxMzYxLCBrc2M1NjAxLTE5OTIsIGtzYzU2MDFfMTk5Ml0KLTQ2LiAgQ2hhcnNldG5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlkaXNwbGF5TmFtZTogeC1NUzk1MC1IS1NDUwotCWFsaWFzZXM6IFtNUzk1MF9IS1NDU10KLTQ3LiAgQ2hhcnNldG5hbWU6IHgtbXN3aW4tOTM2Ci0JZGlzcGxheU5hbWU6IHgtbXN3aW4tOTM2Ci0JYWxpYXNlczogW21zOTM2LCBtc185MzZdCi00OC4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NDkKLQlhbGlhc2VzOiBbd2luZG93czk0OSwgbXNfOTQ5LCBtczk0OV0KLTQ5LiAgQ2hhcnNldG5hbWU6IHgtd2luZG93cy05NTAKLQlkaXNwbGF5TmFtZTogeC13aW5kb3dzLTk1MAotCWFsaWFzZXM6IFt3aW5kb3dzLTk1MCwgbXM5NTBdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViYmJhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1Y2YzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0NyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCBvbmx5IGF0IGRldmVsb3BtZW50IHRpbWUsIGFuZCBpdAotICogY3JlYXRlcyB0aGUgY2xhc3MgdG8gSlVuaXQgdGVzdCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSB0ZXN0ZmlsZXMKLSAqIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSA9ICJ0ZXN0ZmlsZXMuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GSUxFX0RJUiA9ICJ0ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQgPSBnZXRQbGF0Zm9ybURlZmF1bHQoKTsKLQlwcml2YXRlIGJvb2xlYW4gUkVDUkVBVEVfRklMRVMgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1EZWZhdWx0KCkgewotCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQlyZXR1cm4gcGxhdGZvcm1EZWZhdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCQkJdHJ5IHsKLQkJLy8JCQkJCW5ldyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlcigpLmRvQ3JlYXRlQWxsRmlsZXMoKTsKLQkJLy8JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIHRlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigidGVzdGZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKHRlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoaW50IGNvdW50LCBTdHJpbmcgZmlsZVBhdGhBbmROYW1lLCBTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgU3RyaW5nIGphdmFDaGFyc2V0TmFtZSwgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uKSB7Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVPcktleSA9IGphdmFDaGFyc2V0TmFtZTsKLQkJaWYgKG51bGwgIT0gamF2YUNoYXJzZXROYW1lT3JLZXkgJiYgamF2YUNoYXJzZXROYW1lT3JLZXkuZXF1YWxzKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpKQotCQkJamF2YUNoYXJzZXROYW1lT3JLZXkgPSAiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBjb3VudCArICIgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsiICsgIiBkb1Rlc3QoIFwiIiArIGphdmFDaGFyc2V0TmFtZU9yS2V5ICsgIlwiLCBcIiIgKyBkZXRlY3RlZENoYXJzZXROYW1lICsgIlwiLCAgXCIiICsgZmlsZVBhdGhBbmROYW1lICsgIlwiLCAiICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAiKTsgfSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWxsRmlsZXMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoUkVDUkVBVEVfRklMRVMpIHsKLQkJCUxpc3QgYWxsRmlsZXMgPSBUZXN0c1BsdWdpbi5nZXRBbGxUZXN0RmlsZXMoVEVTVF9GSUxFX0RJUik7Ci0JCQlVUkwgb3V0cHV0RGlyVVJMID0gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCQlGaWxlIHppcG91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXREaXJVUkwuZ2V0UGF0aCgpLCBURVNURklMRVNfWklQRklMRV9OQU1FKTsKLQkJCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSB6aXBPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh6aXBvdXRGaWxlKTsKLQkJCVppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0gPSBuZXcgWmlwT3V0cHV0U3RyZWFtKHppcE91dCk7Ci0JCQlpbnQgY291bnQgPSAxOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gYWxsRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJRmlsZSBmaWxlID0gKEZpbGUpIGl0ZXIubmV4dCgpOwotCQkJCWNyZWF0ZVppcEVudHJ5KHppcE91dHB1dFN0cmVhbSwgZmlsZSk7Ci0JCQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQkJCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQkvLyBqdXN0IHVzZWQgZm9yIGRlYnVnIGluZm8sIGJ1dCBjYW4gdGhyb3cgZXhjZXB0aW9uCi0JCQkJCWphdmFDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCVN0cmluZyBzdWJwYXRoID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCQkJY3JlYXRlVGVzdE1ldGhvZFNvdXJjZShjb3VudCwgc3VicGF0aCwgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgamF2YUNoYXJzZXROYW1lLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJCXppcE91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJemlwT3V0LmNsb3NlKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0U3ViUGF0aE5hbWUoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRQYXRoKCk7Ci0JCWludCBsYXN0SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKFRFU1RfRklMRV9ESVIpOwotCQlTdHJpbmcgc3VicGF0aCA9IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCk7Ci0JCXN1YnBhdGggPSBzdWJwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJcmV0dXJuIHN1YnBhdGg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHppcE91dHB1dFN0cmVhbQotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVppcEVudHJ5KFppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0sIEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN1YlBhdGhOYW1lID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KHN1YlBhdGhOYW1lKTsKLQkJemlwT3V0cHV0U3RyZWFtLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjQgKiA4XTsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQl6aXBPdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJemlwT3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTk5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcy5UZXN0Q29tbW9uTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RPdmVycmlkZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb2RlZFJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy53cml0ZS5UZXN0Q29kZWRXcml0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbC5YTUxFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci0KLQotcHVibGljIGNsYXNzIEVuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8vIEZJWE1FOiBjb21tZW50ZWQgb3V0IGxhbmcuIHNwZWMuIHRlc3RzLCB1bnRpbCBhbGwgbWlncmF0ZWQgdG8gb3JnLmVjbGlwc2UgCi0JLy8gWzI1ODM0M10galVuaXQgZmFpbHVyZXMgYWZ0ZXIgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCBjb250ZW50IHR5cGUgaXMgZGlzYWJsZWQKLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0T3ZlcnJpZGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXIuY2xhc3MsIFRlc3RDb2RlZFdyaXRlLmNsYXNzLCBYTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBYTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmNsYXNzfTsKLS8vCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzfTsKLQkvL3ByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIENTU0VuY29kaW5nVGVzdGVyLmNsYXNzLCBDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEpTUEVuY29kaW5nVGVzdHMuY2xhc3MsIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFhNTE1hbGZvcm1lZElucHV0VGVzdHMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3N9OwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEVuY29kaW5nVGVzdFN1aXRlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWQyOTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKiAKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKLSAqIHR5cGUgY29tbWVudHMgZ28gdG8gV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1jbGFzcyBGaWxlVXRpbCB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGN1cnJlbnRXb3Jrc3BhY2UgPSAiZGV2MDcyNSI7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcmludGVkT25jZSA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSAiL2J1aWxkcy9Xb3Jrc3BhY2VzLyIgKyBjdXJyZW50V29ya3NwYWNlICsgIi9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKCJmaWxlOi8vIiArIGluc3RhbGxQYXRoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFwcmludGVkT25jZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdXRwdXQgd3JpdHRlbiB0byAiICsgZGlyLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCXByaW50ZWRPbmNlID0gdHJ1ZTsKLQkJfQotCi0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdmNGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLQotcHVibGljIGNsYXNzIEdlbmVyYXRlRmlsZXMgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSB7Ci0JCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gInRlc3RmaWxlcy9nZW5lZEZpbGVzLSIgKyBnZXRKYXZhVmVyc2lvbigpOwotCQlyZXR1cm4gbWFpbkRpcmVjdG9yeTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SmF2YVZlcnNpb24oKSB7Ci0JCVN0cmluZyBuYW1lID0gbnVsbDsgLy9TeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZnVsbHZlcnNpb24iKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiICgiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpICsgIikiOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZVhNTEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RW5jb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2UgYW5kIGxvZ2ljIG9mIHRoaXMgY2xhc3MgaXMgdG8gY3JlYXRlIHNtYWxsICJYTUwgZmlsZXMiIG9mCi0gKiB2YXJpb3VzLCBrbm93biBlbmNvZGluZ3MsIHdyaXRlIHRoZW0gdG8gZmlsZXMsIGFuZCBpbiBsYXRlciB0ZXN0cywgYmUgc3VyZQotICogYXBwcm9wcmlhdGUgZW5jb2RpbmcgY2FuIGJlIGRldGVjdGVkLCBhbmQgcmVhZCBpbiBhbmQgaW50YWN0IGNoYXJhY3RlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZVhNTEZpbGVzIGV4dGVuZHMgR2VuZXJhdGVGaWxlcyB7Ci0JcHJpdmF0ZSBTdHJpbmcgTEYgPSAiXG4iOwotCXByaXZhdGUgU3RyaW5nIENSID0gIlxyIjsKLQlwcml2YXRlIFN0cmluZyBDUkxGID0gQ1IgKyBMRjsKLQkvLyBkaWZmZXJlbnQgdGV4dCBzdHJpbmdzIGZvciBjb21wYXJpc29ucwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9MRiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuMTIzNDU2Nzg5MFxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9DUkxGID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XHJcbjEyMzQ1Njc4OTBcclxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHQ1JMRiA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBERUJVR0lORk8gPSB0cnVlOwotCi0KLQlwdWJsaWMgR2VuZXJhdGVYTUxGaWxlcygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKEdlbmVyYXRlWE1MRmlsZXMuY2xhc3MpOwotCQlHZW5lcmF0ZVhNTEZpbGVzIHRoaXNBcHAgPSBuZXcgR2VuZXJhdGVYTUxGaWxlcygpOwotCQl0cnkgewotCQkJLy90aGlzQXBwLmdlbmVyYXRlT3JpZ2luYWxGaWxlcygpOwotCQkJdGhpc0FwcC5nZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJTWFwIGFsbENoYXJzZXRNYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCVNldCBhbGxLZXlzID0gYWxsQ2hhcnNldE1hcC5rZXlTZXQoKTsKLQkJT2JqZWN0W10gYWxsY2hhcnNldHMgPSBhbGxLZXlzLnRvQXJyYXkoKTsKLQkJU3RyaW5nW10gYWxsY2hhcnNldE5hbWVzID0gbmV3IFN0cmluZ1thbGxjaGFyc2V0cy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbGNoYXJzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhbGxjaGFyc2V0TmFtZXNbaV0gPSBhbGxjaGFyc2V0c1tpXS50b1N0cmluZygpOwotCi0JCX0KLQkJLy9jcmVhdGVGaWxlcyhhbGxjaGFyc2V0TmFtZXMsIGZhbHNlKTsKLQkJY3JlYXRlRmlsZXMoYWxsY2hhcnNldE5hbWVzLCB0cnVlKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVGaWxlcyhTdHJpbmdbXSBjaGFyc2V0bmFtZXMsIGJvb2xlYW4gdXNlQ1JMRikgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9IG51bGw7Ci0JCVdyaXRlciBvdXQgPSBudWxsOwotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lQW5kRmlsZUV4dGVuc2lvbigpOwotCQlMaXN0IGNoYXJzZXRGaWxlc1dyaXR0ZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnNldG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCi0KLQkJCQljaGFyc2V0TmFtZSA9IGNoYXJzZXRuYW1lc1tpXTsKLQotCQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQkJQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIgPSBjaGFyc2V0Lm5ld0VuY29kZXIoKTsKLQkJCQljaGFyc2V0RW5jb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQkJY2hhcnNldEVuY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJCQlTdHJpbmcgaGVhZGVyID0gZ2V0SGVhZGVyU3RhcnQoKSArIGNoYXJzZXROYW1lICsgZ2V0SGVhZGVyRW5kKCk7Ci0JCQkJU3RyaW5nIGZ1bGx0ZXh0ID0gbnVsbDsKLQkJCQlpZiAodXNlQ1JMRikgewotCQkJCQlmdWxsdGV4dCA9IGhlYWRlciArIHRleHRVU19BU0NJSV9DUkxGOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZnVsbHRleHQgPSBoZWFkZXIgKyB0ZXh0VVNfQVNDSUlfTEY7Ci0JCQkJfQotCi0JCQkJaWYgKCFpc0ViY2lkaWMoY2hhcnNldE5hbWUsIGNoYXJzZXRFbmNvZGVyKSkgewotCQkJCQlpZiAoY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKGZ1bGx0ZXh0KSkgewotCQkJCQkJLy8JCQkJCQlpZiAoY2FuRW5jb2RlQ1JMRihjaGFyc2V0TmFtZSwgY2hhcnNldEVuY29kZXIpCi0JCQkJCQkvLyAmJgotCQkJCQkJLy8gY2FuRW5jb2RlU2ltcGxlU3RyaW5nKGNoYXJzZXROYW1lLAotCQkJCQkJLy8gY2hhcnNldEVuY29kZXIsICI8PyIpICYmCi0JCQkJCQkvLyBjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoZnVsbHRleHQpKSB7Ci0JCQkJCQlTdHJpbmcgb3V0cHV0ZmlsZW5hbWUgPSAidGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCI7Ci0JCQkJCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihtYWluRGlyZWN0b3J5LCBvdXRwdXRmaWxlbmFtZSwgbnVsbCk7Ci0JCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihvdXRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCQkJCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKLQkJCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQkJCQkJV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgY2hhcnNldEVuY29kZXIpOwotCQkJCQkJLy8gdGhpcyBieXRlIHdyaXRlciBpcyBjcmVhdGVkIGp1c3QgdG8gYmUgYWJsZSB0bwotCQkJCQkJLy8gY291bnQgcHJlY2lzZSBieXRlcy4KLQkJCQkJCVdyaXRlciBieXRlV3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihieXRlc291dCwgY2hhcnNldEVuY29kZXIpOwotCi0JCQkJCQlzdXBwbHlCT01zKGNoYXJzZXROYW1lLCBvdXRwdXRTdHJlYW0sIGJ5dGVzb3V0KTsKLQotCQkJCQkJb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKGZpbGVXcml0ZXIpOwotCi0KLQkJCQkJCW91dC53cml0ZShmdWxsdGV4dCk7Ci0JCQkJCQlieXRlV3JpdGVyLndyaXRlKGZ1bGx0ZXh0KTsKLQkJCQkJCW91dC5jbG9zZSgpOwotCQkJCQkJYnl0ZVdyaXRlci5mbHVzaCgpOwotCQkJCQkJLy8gaWYgd2UgbWFkZSBpcyB0aGlzIGZhciwgd2l0aCBubyBleGNlcHRpb25zLAotCQkJCQkJLy8gZXRjLiwKLQkJCQkJCS8vIHRoZW4KLQkJCQkJCS8vIG11c3QgaGF2ZSBiZWVuCi0JCQkJCQkvLyByZWFsbHkgd3JpdHRlbi4KLQkJCQkJCVN0cmluZyB3cml0dGVuUmVjb3JkID0gY2hhcnNldE5hbWU7Ci0JCQkJCQljaGFyc2V0RmlsZXNXcml0dGVuLmFkZCh3cml0dGVuUmVjb3JkKTsKLQkJCQkJCWlmIChERUJVRykgewotCQkJCQkJCXByaW50RGVidWdJbmZvKHVzZUNSTEYsIGhlYWRlciwgb3V0cHV0ZmlsZW5hbWUsIGJ5dGVzb3V0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKiogY291bGQgbm90IGNvbnZlcnQgc2FtcGxlIGFzY2lpIHRleHQgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKioqKiBjb3VsZCBub3QgZ2VuZXJhdGUgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCVN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLQkJCQkJaWYgKG1zZyA9PSBudWxsKQotCQkJCQkJbXNnID0gIiI7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIGR1ZSB0byAiICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgICIgKyBtc2cpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqKiogY291bGQgbm90IGdlbmVyYXRlIGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQlTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7Ci0JCQkJCWlmIChtc2cgPT0gbnVsbCkKLQkJCQkJCW1zZyA9ICIiOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBkdWUgdG8gIiArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiICAiICsgbXNnKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAob3V0ICE9IG51bGwpIHsKLQkJCQkJb3V0LmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQotCQkvLyBub3cgY3JlYXRlIGZpbGUgdGhhdCBzdW1tYXJpemVzIHdoYXQgd2FzIHdyaXR0ZW4KLQkJLy8gc3VpdGFibGUgdG8gcGFzdGUgYXMgbWV0aG9kIGluIHRlc3QgY2xhc3MKLQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IobWFpbkRpcmVjdG9yeSwgInRlc3RNZXRob2RzLnRleHQiLCBudWxsKTsKLQkJRmlsZVdyaXRlciBvdXRwcm9wZXJ0aWVzID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZSk7Ci0JCW91dHByb3BlcnRpZXMud3JpdGUoY2hhcnNldEZpbGVzV3JpdHRlbi5zaXplKCkgKyBDUkxGKTsKLQkJSXRlcmF0b3IgaXRlbXMgPSBjaGFyc2V0RmlsZXNXcml0dGVuLml0ZXJhdG9yKCk7Ci0JCWludCBuID0gMDsKLQkJd2hpbGUgKGl0ZW1zLmhhc05leHQoKSkgewotCQkJU3RyaW5nIGl0ZW1DcmVhdGVkID0gKFN0cmluZykgaXRlbXMubmV4dCgpOwotCQkJU3RyaW5nIHRlc3RNZXRob2QgPSBjcmVhdGVNZXRob2QobisrLCBpdGVtQ3JlYXRlZCk7Ci0JCQlvdXRwcm9wZXJ0aWVzLndyaXRlKHRlc3RNZXRob2QgKyBDUkxGKTsKLQkJfQotCQlvdXRwcm9wZXJ0aWVzLmNsb3NlKCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJIHRob3VnaHQgdGhpcyB1c2VkIHRvIGJlIGF1dG9tYXRpYywgYnV0IGRvZXNuJ3Qgc2VlbSB0byBiZSBub3c/IQotCSAqLwotCXByaXZhdGUgdm9pZCBzdXBwbHlCT01zKFN0cmluZyBjaGFyc2V0TmFtZSwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlieXRlW10gbnVsbEJ5dGVzID0gbmV3IGJ5dGVbXXsweDAwLCAweDAwfTsKLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2IikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2TEUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJYLVVuaWNvZGVMaXR0bGUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTZCRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlgtVW5pY29kZUJpZyIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMiIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMkxFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyQkUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogQHBhcmFtIGl0ZW1DcmVhdGVkCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTWV0aG9kKGludCBpLCBTdHJpbmcgaXRlbUNyZWF0ZWQpIHsKLQkJU3RyaW5nIHRlbXBsYXRlID0gIglwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBpICsgIigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAge1xyXG4iICsgIgkJU3RyaW5nIGNoYXJzZXROYW1lID0gXCIiICsgaXRlbUNyZWF0ZWQgKyAiXCI7XHJcbiIgKyAiCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpO1xyXG4iICsgIgl9IjsKLQkJcmV0dXJuIHRlbXBsYXRlOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludERlYnVnSW5mbyhib29sZWFuIHVzZUNSTEYsIFN0cmluZyBoZWFkZXIsIFN0cmluZyBvdXRwdXRmaWxlbmFtZSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB7Ci0JCWJ5dGVbXSBieXRlcyA9IGJ5dGVzb3V0LnRvQnl0ZUFycmF5KCk7Ci0JCWludCBuQnl0ZXMgPSBieXRlcy5sZW5ndGg7Ci0JCWludCBuQ2hhcnMgPSAwOwotCQlpZiAodXNlQ1JMRikgewotCQkJbkNoYXJzID0gaGVhZGVyLmxlbmd0aCgpICsgdGV4dFVTX0FTQ0lJX0NSTEYubGVuZ3RoKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQluQ2hhcnMgPSBoZWFkZXIubGVuZ3RoKCkgKyB0ZXh0VVNfQVNDSUlfTEYubGVuZ3RoKCk7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldyb3RlICIgKyBuQ2hhcnMgKyAiIGNoYXJhY3RlcnMgYW5kICIgKyBuQnl0ZXMgKyAiIGJ5dGVzIHRvICIgKyBvdXRwdXRmaWxlbmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogbmV2ZXIgdXNlZAotCSBib29sZWFuIGNhbkVuY29kZVNpbXBsZVN0cmluZyhTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvY2RlciwgU3RyaW5nIHNpbXBsZVN0cmluZykgewotCQkvLyB0aGlzIG1ldGhvZCBhZGRlZCBzaW5jZSBzb21lIGVuY29kZXJzIGRvbid0IHJlcG9ydCB0aGF0IHRoZXkgY2FuJ3QKLQkJLy8gZW5jb2RlIHNvbWV0aGluZywgYnV0IHRoZXkgb2J2aW91c2x5Ci0JCS8vIGNhbid0LCBhdCBsZWFzdCBpbiB0aGUgbm9ybWFsIG1lYW5pbmcgb2YgdGhlIHdvcmQuCi0JCS8vIFRoaXMgc2VlbXMgdG8gbW9zdGx5IGFwcGx5IHRvIHNvbWUgSUJNIHZhcmlldGllcyB3aGVyZSwgYXBwYXJlbnRseSwKLQkJLy8gdGhlIGlucHV0IGNhbid0IGJlIGludGVycHJldGVkIGF0IGFsbCB3aXRob3V0IGtub3dpbmcgZW5jb2RpbmcKLQkJLy8gKHRoYXQgaXMKLQkJLy8gY291bGQgbm90IGJlIHVzZWQgZm9yIGNvbnRlbnQgYmFzZWQgZW5jb2RpbmcpLgotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJlc3VsdCA9IHNpbXBsZVN0cmluZy5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5tYXhCeXRlc1BlckNoYXIoKSAhPSAxKSB7Ci0JCQkJLy8gZG9uJ3QgY2hlY2sgbXVsaXRieXRlIGVuY29kZXJzLCBqdXN0IGFzc3VtZSB0cnVlIChmb3Igbm93KS4KLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCWlmIChjaGFyc2V0RW5jb2NkZXIubWF4Qnl0ZXNQZXJDaGFyKCkgPT0gNCkgewotCQkJCQkvL2V4Y2VwdCwgbGV0J3MganVzdCBleGNsdWRlIGZvdXIgYnl0ZSBzdHJlYW1zLCBmb3Igbm93LgotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5hdmVyYWdlQnl0ZXNQZXJDaGFyKCkgPT0gMikgewotCQkJCQkJLy8gZXhjZXB0LCBmb3Igc29tZSByZWFzb24gVVRGIGhhcyBtYXggYnl0ZXMgb2YgNAotCQkJCQkJLy8gKGF2ZXJhZ2UgYnl0ZXMgb2YgMikuCi0JCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQSB2ZXJ5IGhldXJpc3RpYyBtZXRob2QuIFNob3VsZCBoYXZlIHRhYmxlLCBzb21lZGF5LgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0ViY2lkaWMoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2NkZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJU3RyaW5nIHNpbXBsZVN0cmluZyA9ICI8PyI7Ci0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCS8vIGV4cGVyaW1lbnRpbmcvZGVidWdnaW5nIHNob3dlZCB0aGUga25vd24gZWJjaWRpYyBvbmNlcyBhbHdheXMKLQkJLy8gIm1pcyIgdHJhbmxhdGVkIHRvIGNoYXJhY3RlcnMgTCBhbmQgby4KLQkJcmVzdWx0ID0gIkxvIi5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhcnNldE5hbWUgKyAiIGFzc3VtZWQgdG8gYmUgRWRjaWRpYyIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNoYXJzZXQKLQkgKi8KLQkgYm9vbGVhbiBjYW5FbmNvZGVDUkxGKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQkvL1N0cmluZyBjaGFyc2V0Q29ub25pY2FsTmFtZSA9IGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCk7Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKExGKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IExGOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIExGIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShDUikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBDUjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBDUiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoQ1JMRikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IENSTEY7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgQ1JMRiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBleHBsb3JlQ29udmVyc2lvbihTdHJpbmcgY2hhcnNldE5hbWUsIFN0cmluZyBzdHJpbmdOYW1lLCBTdHJpbmcgdGVzdFN0cmluZykgdGhyb3dzIEVycm9yIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBuZXdMRiA9IG5ldyBTdHJpbmcodGVzdFN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSkpOwotCQkJU3lzdGVtLm91dC5wcmludCgib2xkICIgKyBzdHJpbmdOYW1lICsgIiAoZGVjKTogIik7Ci0JCQlkdW1wU3RyaW5nKFN5c3RlbS5vdXQsIHRlc3RTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJuZXcgIiArIHN0cmluZ05hbWUgKyAiIChkZWMpOiAiKTsKLQkJCWR1bXBTdHJpbmcoU3lzdGVtLm91dCwgbmV3TEYpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy9zaG91bGQgbmV2ZXIgaGFwcGVuLCBhbHJlYWR5IGNoZWNrZWQKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvdXQKLQkgKiBAcGFyYW0gbGYyCi0JICovCi0JcHJpdmF0ZSB2b2lkIGR1bXBTdHJpbmcoUHJpbnRTdHJlYW0gb3V0LCBTdHJpbmcgbGYyKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGYyLmxlbmd0aCgpOyBpKyspIHsKLQkJCW91dC5wcmludCgoaW50KSBsZjIuY2hhckF0KGkpICsgIiAiKTsKLQkJfQotCi0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWVBbmRGaWxlRXh0ZW5zaW9uKCkgewotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbCI7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhlYWRlclN0YXJ0KCkgewotCQlyZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiI7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SGVhZGVyRW5kKCkgewotCQlyZXR1cm4gIlwiPz4iOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZjBlZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogU21hbGwgY2xhc3MgdG8gbGlzdCBjaGFyc2V0IGRldGVjdGVkIGZvciBhIHBhcnRpY3VsYXIgVk0uIFNpbXBsZSBydW4gYXMgSmF2YQotICogQXBwbGljYXRpb25zIHRvIGdldCBvdXRwdXQgdG8gc3RhbmRhcmQgb3V0LgotICovCi1wdWJsaWMgY2xhc3MgTGlzdENoYXJzZXRzIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyB0YWIgPSAiXHQiOwotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCUxpc3RDaGFyc2V0cyB0aGlzQXBwID0gbmV3IExpc3RDaGFyc2V0cygpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3VycmVudCBMb2NhbGU6ICIgKyBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlTdHJpbmcgbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5mdWxsdmVyc2lvbiIpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnZlcnNpb24iKSArICIgKCIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEucnVudGltZS52ZXJzaW9uIikgKyAiKSI7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJKUkUgdmVyc2lvbjogIiArIG5hbWUpOwotCi0JCVN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkubGlzdChTeXN0ZW0ub3V0KTsKLQotCQl0aGlzQXBwLmxpc3RPZkxvY2FsZXMoKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGUuZW5jb2RpbmcucGtnOiAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nLnBrZyIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlLmVuY29kaW5nOiAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihhcmdzW2ldKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJdGhpc0FwcC5saXN0T2ZDaGFyc2V0cygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBsaXN0T2ZMb2NhbGVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2YWlsYWJsZSBMb2NhbGVzIik7Ci0JCUxvY2FsZVtdIGxvY2FsZXMgPSBMb2NhbGUuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsb2NhbGVzW2ldKTsKLQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgbGlzdE9mQ2hhcnNldHMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXZhaWxhYmxlIENoYXJzZXRzIik7Ci0JCWludCBjb3VudCA9IDA7Ci0JCU1hcCBtYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWNvdW50Kys7Ci0JCQkvLyBHZXQgY2hhcnNldCBuYW1lCi0JCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnQgKyAiLiAiICsgIiBDaGFyc2V0bmFtZTogIiArIGNoYXJzZXROYW1lKTsKLQkJCS8vIEdldCBjaGFyc2V0Ci0JCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoY2hhcnNldE5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHRhYiArICJkaXNwbGF5TmFtZTogIiArIGNoYXJzZXQuZGlzcGxheU5hbWUoTG9jYWxlLmdldERlZmF1bHQoKSkpOwotCQkJU2V0IHNldCA9IGNoYXJzZXQuYWxpYXNlcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHRhYiArICJhbGlhc2VzOiAiICsgc2V0KTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOWM2MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkJ5dGVSZWFkZXI7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRvcERpcgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0Qnl0ZVJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgQnl0ZVJlYWRlcihuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSkpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9aaXBwZWRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1ppcHBlZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzOTFhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1ppcHBlZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFppcHBlZFRlc3QgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLmVuY29kaW5nLnJlc291cmNlLm5ld3Rlc3RzIjsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldFVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBJUHJvamVjdCBmUHJvamVjdCA9IG51bGw7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKCFpc1NldFVwKSB7Ci0JCQljcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmUHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWlzU2V0VXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2h1dERvd24oKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChpc1NldFVwKSB7Ci0JCQlpZiAoZlByb2plY3QgIT0gbnVsbCAmJiBmUHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWlzU2V0VXAgPSBmYWxzZTsKLQkJfQotCX0KLQotCXB1YmxpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJaWYgKGZQcm9qZWN0ICE9IG51bGwpIHsKLQkJCWZpbGUgPSAoSUZpbGUpIGZQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlByb2plY3QsIG51bGwsIG51bGwpOwotCQlmUHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJcmV0dXJuIGZQcm9qZWN0OwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzI0YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcmVmL1Rlc3RQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByZWY7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0UHJlZmVyZW5jZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJlZmVyZW5jZXMKLQkgKiBAdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDaGlsZHJlbihQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcykgdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgcHJlZmVyZW5jZXMuYWJzb2x1dGVQYXRoKCkpOwotCQlTdHJpbmcgW10ga2V5cyA9IHByZWZlcmVuY2VzLmtleXMoKTsKLQkJcHJpbnRLZXlzKGtleXMpOwotCQlTdHJpbmdbXSBjaGlsZHJlbiA9IHByZWZlcmVuY2VzLmNoaWxkcmVuTmFtZXMoKTsKLQkJcHJpbnRDaGlsZHJlbihjaGlsZHJlbik7IAotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgY2hpbGQgPSBjaGlsZHJlbltpXTsKLQkJCVByZWZlcmVuY2VzIHN1YlByZWZlcmVuY2VzID0gcHJlZmVyZW5jZXMubm9kZShjaGlsZCk7Ci0JCQlTdHJpbmcgW10gc3Via2V5cyA9IHN1YlByZWZlcmVuY2VzLmtleXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGNoaWxkKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJcHJpbnRLZXlzKHN1YmtleXMpOwotCQl9Ci0JfQotCXN0YXRpYyBwcml2YXRlIHZvaWQgcHJpbnRDaGlsZHJlbihTdHJpbmdbXSBjaGlsZHJlbikgewotCQlwcmludFN0cmluZ0FycmF5KGNoaWxkcmVuLCAiXHQiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0ga2V5cwotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRLZXlzKFN0cmluZ1tdIGtleXMpIHsKLQkJcHJpbnRTdHJpbmdBcnJheShrZXlzLCAiXHRcdCIpOwotCQkKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSB2b2lkIHByaW50U3RyaW5nQXJyYXkoU3RyaW5nW10gYXJyYXksIFN0cmluZyB0YWJDaGFycykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgc3RyaW5nID0gYXJyYXlbaV07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiQ2hhcnMgKyBzdHJpbmcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQotCXByaXZhdGUgdm9pZCBkaXNwbGF5UHJlZmVyZW5jZVRyZWUoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgZWNsaXBzZVByZWZlcmVuY2VzID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0Um9vdE5vZGUoKTsKLQotCi0JCXRyeSB7Ci0JCQlTdHJpbmdbXSBjaGlsZHJlbiA9IGVjbGlwc2VQcmVmZXJlbmNlcy5jaGlsZHJlbk5hbWVzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZWNsaXBzZVByZWZlcmVuY2VzLmFic29sdXRlUGF0aCgpKTsKLQkJCXByaW50Q2hpbGRyZW4oY2hpbGRyZW4pOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIHN0cmluZyA9IGNoaWxkcmVuW2ldOwotCQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoc3RyaW5nKTsKLQkJCQlwcmludENoaWxkcmVuKHByZWZlcmVuY2VzKTsKLQotCi0JCQl9Ci0KLQkJfQotCQljYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBY2Nlc3MoKSB7Ci0JCWlmIChERUJVRykgeyAKLQkJCWRpc3BsYXlQcmVmZXJlbmNlVHJlZSgpOwotCQl9Ci0JCS8vIGFsd2F5cyBvayBpZiBubyBleGNlcHRpb25zIHRocm93bgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmSFRNTCgpIHsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlRm9yKCJ0ZXN0Lmh0bWwiKTsKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhjb250ZW50VHlwZSk7Ci0JCWFzc2VydE5vdE51bGwocHJlZmVyZW5jZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmWE1MKCkgewotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoInRlc3QueG1sIik7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoY29udGVudFR5cGUpOwotCQlhc3NlcnROb3ROdWxsKHByZWZlcmVuY2VzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjc4ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RDb21tb25OYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25DaGFyc2V0TmFtZXM7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29tbW9uTmFtZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZXMoKSB7Ci0JCVN0cmluZ1tdIG5hbWVzID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldENvbW1vbkNoYXJzZXROYW1lcygpOwotCQlhc3NlcnRUcnVlKCJjb21tb24gY2hhcnNldCBuYW1lcyBjb3VsZCBub3QgYmUgbG9hZGVkIiwgbmFtZXMgIT0gbnVsbCAmJiBuYW1lcy5sZW5ndGggPiAwKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIG5hbWUgPSBuYW1lc1tpXTsKLQkJCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0RGlzcGxheVN0cmluZyhuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIG5hbWUgKyAiICAgICIgKyBkaXNwbGF5TmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9UZXN0RGVmYXVsdElhbmFOYW1lcyhTdHJpbmcgc3RyaW5nVG9DaGVjaywgU3RyaW5nIGRlZmF1bHROYW1lLCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3RyaW5nVG9DaGVjaywgZGVmYXVsdE5hbWUpOwotCQlhc3NlcnRFcXVhbHMoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciAiICsgc3RyaW5nVG9DaGVjaywgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFTQ0lJKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJBU0NJSSIsICJVVEYtOCIsICJVUy1BU0NJSSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3AxMjUyKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJDcDEyNTIiLCAiVVRGLTgiLCAiSVNPLTg4NTktMSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NTAoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTUwIiwgIlVURi04IiwgIkJJRzUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENwMTI1NigpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiQ3AxMjU2IiwgIlVURi04IiwgIndpbmRvd3MtMTI1NiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NDkoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTQ5IiwgIlVURi04IiwgIkVVQy1LUiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RVVDX0pQKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJFVUMtSlAiLCAiVVRGLTgiLCAiRVVDLUpQIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RUb3RhbGx5RmFrZSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygidG90YWxseUZha2UiLCAiVVRGLTgiLCAiVVRGLTgiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN5c3RlbUVuY29kaW5nKCkgewotCQlTdHJpbmcgc3lzdGVtRW5jID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIik7Ci0JCWlmIChzeXN0ZW1FbmMgIT0gbnVsbCkgewotCQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3lzdGVtRW5jLCAiVVRGLTgiKTsKLQkJCWFzc2VydE5vdE51bGwoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciBzeXN0ZW0gZW5jb2RpbmcgIiArIHN5c3RlbUVuYywgYWN0dWFsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdERpc3BsYXlOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg0MjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkNoYXJzZXROYW1lczsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdERpc3BsYXlOYW1lcyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZSgpIHsKLQkJU3RyaW5nIGRpc3BsYXlOYW1lID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldERpc3BsYXlTdHJpbmcoIklTTy04ODU5LTIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZGlzcGxheSBuYW1lIGZvciBjaGFyc2V0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQiLCBkaXNwbGF5TmFtZSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGRpc3BsYXlOYW1lKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdE92ZXJyaWRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTQwMGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkSU87Ci0KLXB1YmxpYyBjbGFzcyBUZXN0T3ZlcnJpZGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIFN0cmluZyBkb1Rlc3RPdmVycmlkZShTdHJpbmcgc3RyaW5nVG9DaGVjaykgewotCi0JCVN0cmluZyBjaGFyc2V0ID0gQ29kZWRJTy5nZXRBcHByb3ByaWF0ZUphdmFDaGFyc2V0KHN0cmluZ1RvQ2hlY2spOwotCQlhc3NlcnROb3ROdWxsKCJvdmVycmlkZSB0ZXN0IGZhaWxlZCBmb3IgIiArIHN0cmluZ1RvQ2hlY2ssIGNoYXJzZXQpOwotCQlyZXR1cm4gY2hhcnNldDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SVNPODg1OThJKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZG9UZXN0T3ZlcnJpZGUoIklTTy04ODU5LTgtSSIpOwotCQlhc3NlcnRFcXVhbHMoIm1hcHBpbmcgb3ZlcnJpZGUgbm90IGNvcnJlY3QgZm9yIElTTy04ODU5LTgtSSIsICJJU08tODg1OS04IiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0pJUygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRvVGVzdE92ZXJyaWRlKCJYLVNKSVMiKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXBwaW5nIG92ZXJyaWRlIG5vdCBjb3JyZWN0IGZvciBYLVNKSVMiLCAiU2hpZnRfSklTIiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDM2ZGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLk5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkUmVhZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcm90ZWN0ZWQgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9IGVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfSBlbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb2RlZFJlYWRlcigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8gdHJ5IHsKLQkJLy8gbmV3IFRlc3RDb2RlZFJlYWRlcigpLmRvQWxsRmlsZXMoKTsKLQkJLy8gfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8gfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vIElDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vIGFzc2VydFRydWUoZG90ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLyBJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLyBhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyWzQwMDBdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLyBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLyBkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8gcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vIFByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8gZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLyB0cnkgewotCQkJCS8vIHByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8gfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vIH0KLQkJCQkvLyB9Ci0JCQkJLy8gfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlleHBlY3RlZERldGVjdGVkQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0KTsKLQotCQkvLyBub3RlOiBldmVudHVhbGx5LCBJIHNob3VsZCBjaGFuZ2UgY2FsbGluZyBtZXRob2RzIHNvIGlmIGRldGVjdGVkCi0JCS8vIGNoYXJzZXQgaXMgZXhwZWN0ZWQgdG8gYmUgc2FtZQotCQkvLyBhcyB0aGUgJ3VzZWQnIGphdmEgY2hhcnNldCwgdGhlbiBzaW1wbHkgcGFzcyBpbiBudWxsLCBidXQgZm9yIG5vdywKLQkJLy8gd2UnbGwgImZvcmNlIiB0aGF0IGhlcmUgaW4gdGhpcwotCQkvLyBtZXRob2QuCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscyhleHBlY3RlZERldGVjdGVkQ2hhcnNldCkpIHsKLQkJCWV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ID0gbnVsbDsKLQkJfQotCi0JCXRyeSB7Ci0JCQlyZWFkZXIgPSBkb0NvcmVUZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBmaWxlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWlmIChleHBlY3RlZEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQkJYm9vbGVhbiByZXN1bHQgPSBleHBlY3RlZEV4Y2VwdGlvbi5pc0luc3RhbmNlKGUpOwotCQkJCWFzc2VydFRydWUoIlVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZ2V0R29vZEZ1bGxNc2coZSksIHJlc3VsdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8vIHdpbGwgYWx3YXkgYXNzZXJ0IGlmIGdldHMgdG8gaGVyZQotCQkJCVN0cmluZyBtc2cgPSBnZXRHb29kRnVsbE1zZyhlKTsKLQkJCQlhc3NlcnROdWxsKCJVbmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIG1zZywgZSk7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAocmVhZGVyICE9IG51bGwpIHsKLQkJCQlyZWFkZXIuY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFJlYWRlciBkb0NvcmVUZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVJlYWRlciByZWFkZXI7Ci0JCS8vIGNyZWF0ZSB0aGVzZSBmaXJzdCwgdG8gdGVzdCBleGNlcHRpb24gYmVpbmcgdGhyb3duIGNvcnJlY3RseQotCQlDb2RlZFJlYWRlckNyZWF0b3IgY29kZWRSZWFkZXJDcmVhdG9yID0gbmV3IENvZGVkUmVhZGVyQ3JlYXRvcigpOwotCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUpOwotCQlyZWFkZXIgPSBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0Q29kZWRSZWFkZXIoKTsKLQotCQlTdHJpbmcgamF2YUNoYXJzZXROYW1lID0gZmlsZS5nZXRDaGFyc2V0KCk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlqYXZhQ2hhcnNldE5hbWUgPSBtYXNzYWdlQ2hhcnNldChqYXZhQ2hhcnNldE5hbWUpOwotCQkvLyBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0RW5jb2RpbmdNZW1lbnRvKCkuZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCVN0cmluZyBwbGF0Zm9ybURlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKGphdmFDaGFyc2V0TmFtZS5lcXVhbHMocGxhdGZvcm1EZWZhdWx0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlib29sZWFuIGFzRXhwZWN0ZWQgPSBqYXZhQ2hhcnNldE5hbWUuZXF1YWxzKGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQkJYXNzZXJ0VHJ1ZShqYXZhQ2hhcnNldE5hbWUgKyAiIGRpZCBub3QgZXF1YWwgdGhlIGV4cGVjdGVkICIgKyBleHBlY3RlZEphdmFDaGFyc2V0ICsgIiAodGhpcyBpcyBhIFZNIGRlcGVuZGVudCB0ZXN0KSIsIGFzRXhwZWN0ZWQpOwotCQl9Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IChTdHJpbmcpIGRlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCk7Ci0JCVN0cmluZyBkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkgPSBnZXREZXRlY3RlZENoYXJzZXROYW1lKGRlc2NyaXB0aW9uKTsKLQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5ID0gbWFzc2FnZUNoYXJzZXQoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJLy8gaWYgKGRldGVjdGVkQ2hhcnNldE5hbWUgPT0gbnVsbCkgewotCQkvLyBkZXRlY3RlZENoYXJzZXROYW1lID0gamF2YUNoYXJzZXROYW1lUHJvcGVydHk7Ci0JCS8vIH0KLQkJaWYgKCFleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCWJvb2xlYW4gZXhwZWNlZFJlc3VsdCA9IGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKGphdmFDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImphdmEgYmFzZWQgY2hhcnNldCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY2VkUmVzdWx0KTsKLQkJfSBlbHNlIHsKLQkJCVN0cmluZyBleHBlY3RlZERlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlib29sZWFuIEV4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWREZWZhdWx0LmVxdWFscyhqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCQlhc3NlcnRUcnVlKCJqYXZhIGJhc2VkIGNoYXJzZXQgbmFtZSBub3QgYXMgZXhwZWN0ZWQgd2hlbiBwbGF0Zm9ybSBkZWZhdWx0IGV4cGVjdGVkIiwgRXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ICE9IG51bGwpIHsKLQkJCWJvb2xlYW4gZXhwZWN0ZWRSZXN1bHQgPSBleHBlY3RlZERldGVjdGVkQ2hhcnNldC5lcXVhbHMoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImRldGVjdGVkIGNoYXJzZXQgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0JCS8vIHRlc3QgaWYgY2FuIHJlYWQvd3JpdGUgZmlsZQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludChidWZmZXIpOwotCQl9Ci0JCXJldHVybiByZWFkZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMganVzdCB0byBoZWxwIGhhbmRsZSB0cmFuc2l0aW9uIGZyb20gdXNpbmcKLQkgKiBFbmNvZGluZ01lbXRlbnRvIHRvIG5vdCB1c2luZyBlbmNvZGluZ01lbWVudG8uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZShJQ29udGVudERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlyZXN1bHQgPSAoU3RyaW5nKSBkZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQuREVURUNURURfQ0hBUlNFVCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0R29vZEZ1bGxNc2coRXhjZXB0aW9uIGUpIHsKLQkJU3RyaW5nIG1zZyA9IGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiICsgZS5nZXRNZXNzYWdlKCk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAiRVVDLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy0yMDIyLUpQIiwgIklTTy0yMDIyLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgImlzby04ODU5LTEiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ3aW5kb3dzLTEyNTIiLCAiQ3AxMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAiSVNPLTg4NTktNyIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJVVEYtMTYiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLAotCS8vIFVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0cmVhbUNhc2VIVE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0iLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdHJlYW1DYXNlSlNQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3ODk0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBzaG91bGQgY29udGFpbiBhICJtYXN0ZXIgbGlzdCIgb2YgYWxsIGZpbGVuYW1lcyBnZW5lcmF0ZWQgYnkKLSAqIHZhcmlvdXMgVk0ncyAuLi4gdGhlbiB0aGUgdGVzdCBpbmdvcmVzIGl0IGlmIHRoZSBmaWxlbmFtZSdzIG5vdCBmb3VuZCBkdWUKLSAqIHRvIHRoZSBWTSBub3Qgc3VwcG9ydGluZyBpdC4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMgZXh0ZW5kcyBUZXN0Q29kZWRSZWFkZXIgewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChjaGFyc2V0TmFtZSwgY2hhcnNldE5hbWUsIEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgIT0gbnVsbCAmJiBleHBlY3RlZEphdmFDaGFyc2V0LmluZGV4T2YoIlVURi0zMiIpID4gLTEpIHsKLQkJCXJldHVybjsgLy93b24ndCB0cnkgMzIgYml0IHJpZ2h0IG5vdwotCQl9Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQotCQkvLyBpZiB0aGVyZSBubyBmaWxlLCBqdXN0IGFzc3VtZSB0aGF0IGl0cyBkdWUgdG8gd2hpY2ggVk0gaXMKLQkJLy8gYnJpbmcgdXNlZC4gKENvdWxkIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB0byBhdm9pZCBjb3VudGluZyBhcyBhCi0JCS8vIHRlc3QpIC0gdGhpcyBjaGVjayBpbiBoZXJlIGZvciBpbml0aWFsIGRlYnVnZ2luZyBvbmx5Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCW5vdFJhbisrOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IG5vdCByYW4gc2luY2UgY2hhcnNldCBub3Qgc3VwcG9ydGVkIGJ5IFZNOiAiICsgZmlsZVBhdGgpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZEphdmFDaGFyc2V0LCBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyQkUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLThKIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTM2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLyogCi1yZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTSAKLWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLSovIAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLS8qIAotcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0gCi1odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0qLyAKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlTGl0dGxlIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZTZhNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2UuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29udGVudERlc2NyaXB0aW9uKCkgewotCQlzdXBlcigpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vCQl0cnkgewotCQkvLwkJCW5ldyBUZXN0Q29kZWRSZWFkZXIoKS5kb0FsbEZpbGVzKCk7Ci0JCS8vCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkvLwlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGZpbGUuZ2V0Q29udGVudHMoKSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkvLwlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBmaWxlIGFuZCBzdHJlYW0gY29udGVudERlc2NyaXB0aW9uIiwgZmlsZUNvbnRlbnREZXNjcmlwdGlvbiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQotCQlhc3NlcnROb3ROdWxsKCJOdWxsIGNvbnRlbnQgZGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJU3RyaW5nIGZvdW5kQ2hhcnNldCA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q2hhcnNldCgpOwotCQlmb3VuZENoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChmb3VuZENoYXJzZXQpOwotCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ID09IG51bGwgfHwgZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQuZXF1YWxzKHBsYXRmb3JtRGVmYXVsdCkpOwotCQl9Ci0JCWVsc2UgewotCQkJYm9vbGVhbiBhc0V4cGVjdGVkID0gZm91bmRDaGFyc2V0LmVxdWFscyhleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJCWFzc2VydFRydWUoZm91bmRDaGFyc2V0ICsgIiBkaWQgbm90IGVxdWFsIHRoZSBleHBlY3RlZCAiICsgZXhwZWN0ZWRKYXZhQ2hhcnNldCArICIgKHRoaXMgaXMgYSBWTSBkZXBlbmRlbnQgdGVzdCkiLCBhc0V4cGVjdGVkKTsKLQkJfQotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm91bmRDaGFyc2V0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfQotCQllbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiYWJjIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgid2luZG93cy0xMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ0ZXN0anVuayIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTYiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0vLyAgWzI0OTIxNF0gLSBYTUxDb250ZW50RGVzY3JpYmVyIG5vIGxvbmdlciByZXR1cm5zIGNvbnRlbnQgdHlwZXMgZm9yIGludmFsaWQgZW5jb2RpbmdzCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCBzdGFuZGFsb25lPSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIGphdmEubmlvLmNoYXJzZXQuSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uLmNsYXNzKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2TEUiLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOGQ5OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcyBleHRlbmRzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiOwotCQlkb1Rlc3QoY2hhcnNldE5hbWUsIGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0KLQkJLy8gaWYgdGhlcmUgbm8gZmlsZSwganVzdCBhc3N1bWUgdGhhdCBpdHMgZHVlIHRvIHdoaWNoIFZNIGlzCi0JCS8vIGJyaW5nIHVzZWQuIChDb3VsZCBiZSBpbXByb3ZlZCBpbiBmdXR1cmUgdG8gYXZvaWQgY291bnRpbmcgYXMgYQotCQkvLyB0ZXN0KSAtIHRoaXMgY2hlY2sgaW4gaGVyZSBmb3IgaW5pdGlhbCBkZWJ1Z2dpbmcgb25seQotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlub3RSYW4rKzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBub3QgcmFuIHNpbmNlIGNoYXJzZXQgbm90IHN1cHBvcnRlZCBieSBWTTogIiArIGZpbGVQYXRoKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQlzdXBlci5kb1Rlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0vKiAKLXJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNIAotaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotKi8gCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUJpZyI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjIwZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnRlbXAudGVzdHMuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50VHlwZURldGVjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCUlDb250ZW50VHlwZSBmaWxlQ29udGVudFR5cGUgPSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCB0eXBlIHdhcyBudWxsIiwgZmlsZUNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgc3RyZWFtQ29udGVudFR5cGUgPSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgic3RyZWFtIGNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBjb250ZW50IHR5cGUgYmFzZWQgb24gZmlsZSBhbmQgc3RyZWFtOiAiLCBmaWxlQ29udGVudFR5cGUsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQkvLyBpZiBlcXVhbCwgYWJvdmUsIGFzIGV4cGVjdGVkLCB0aGVuIG9ubHkgbmVlZCB0byBjaGVjayBvbmUuCi0JCWFzc2VydEVxdWFscygiY29tcGFyZWluZyB3aXRoIGV4cGVjdGVkIGNvbnRlbnQgdHlwZSBpZCIsIGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVDb250ZW50VHlwZS5nZXRJZCgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQl0cnkgewotCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQlzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNvbnRlbnREZXNjcmlwdGlvbiBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlhc3NlcnROb3ROdWxsKCJmaWxlIGNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIGZpbGVDb250ZW50RGVzY3JpcHRpb247Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0Rm9yUGFyZW50KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBjb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlpZiAoY29udGVudERlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJY29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoaW5wdXRTdHJlYW0sIGZpbGUuZ2V0TmFtZSgpLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgY29udGVudERlc2NyaXB0aW9uKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gY29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIGNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgcGFyZW50Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAocGFyZW50Q29udGVudFR5cGUgIT0gbnVsbCAmJiAhZm91bmQpIHsKLQkJCWZvdW5kID0gZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMocGFyZW50Q29udGVudFR5cGUuZ2V0SWQoKSk7Ci0JCQlwYXJlbnRDb250ZW50VHlwZSA9IHBhcmVudENvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kICciICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICInIGluIHBhcmVudCBjaGFpbiBvZiBiYXNlIHR5cGVzIiwgZm91bmQpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLS8vCQkJCSBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0vLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotLy8JCQkJCQl0cnkgewotLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLS8vCQkJCQkJfQotLy8JCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCQkJCX0KLS8vCQkJCQl9Ci0vLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZ2V0VGVzdFByb2plY3QoKSB7Ci0JCXJldHVybiBmVGVzdFByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBhZmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIjsKLQkKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhTTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiOwotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDRiKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotLy8gIFsyNTE3ODZdIC0gTm8gZW5jb2Rpbmcgc2hvdWxkIHRyeSB0byBiZSBwaWNrZWQgdXAgYnkgdGhlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLQotCS8qKgotCSAqIFRoaXMgZmlsZSBpcyBpbGxmb3JtZWQgaW4gaXRzIHNwZWNpZmllZCBjaGFyc2V0Ci0JICogYW5kIGNoYXJhY3RlcnMuIAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLS8vICBbMjUxNzg2XSAtIE5vIGVuY29kaW5nIHNob3VsZCB0cnkgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWFNMQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0vLyAgWzI1MTc4Nl0gLSBObyBlbmNvZGluZyBzaG91bGQgdHJ5IHRvIGJlIHBpY2tlZCB1cCBieSB0aGUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDdQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBudWxsKTsKLQl9Ci0JLy8gWzI1MDM5Ml0gdGhlIHZlcnNpb24gbnVtYmVyIGlzIGlsbGZvcm1lZCBhbmQgc2hvdWxkIG5vdCBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5IHRoZSBYTUxDb250ZW50RGVzY3JpYmVyLgotCS8vIE1pZ2h0IGJlIGFibGUgdG8gZml4IHdoZW4gWzI1MTc4Nl0gaXMgY29ycmVjdGVkCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBbMjUwMzkyXSB0aGUgdmVyc2lvbiBudW1iZXIgaXMgaWxsZm9ybWVkIGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCBjb3JyZWN0bHkgYnkgdGhlIFhNTENvbnRlbnREZXNjcmliZXIuCi0JLy8gTWlnaHQgYmUgYWJsZSB0byBmaXggd2hlbiBbMjUxNzg2XSBpcyBjb3JyZWN0ZWQKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKENSTEYpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChzcGFjZSBvbmx5KSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFdTMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKHNwYWNlLCB0YWJzLCBhbmQgQ1Igb25seSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB0YWcgKG5vdCBqdXN0IHdoaXRlIHNwYWNlKSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjFQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMlAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGxhcmdlLCB1dGYxNiwgYnV0IG5vIHhtbERlY2wKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjRQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBpbGxmb3JtZWQsIGlzIGluIHV0ZjE2LCBidXQgbm90IGluIGhlYWRlciwgbm90IGluIGVuY29kaW5nPSBzcGVjLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjVQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCQlJQ29udGVudFR5cGVbXSBhbGxUeXBlcyA9IHJlZ2lzdHJ5LmdldEFsbENvbnRlbnRUeXBlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBhbGxUeXBlc1tpXTsKLQkJCUlDb250ZW50VHlwZSBwYXJlbnRUeXBlID0gY29udGVudFR5cGUuZ2V0QmFzZVR5cGUoKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoY29udGVudFR5cGUpOwotCi0JCQkJaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAoZXh0ZW5kcyAiICsgcGFyZW50VHlwZSArICIpIik7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAiICsgY29udGVudFR5cGUuZ2V0TmFtZSgpKTsKLQkJCX0KLQkJCVN0cmluZ1tdIGZpbGVzcGVjcyA9IGNvbnRlbnRUeXBlLmdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUuRklMRV9FWFRFTlNJT05fU1BFQyB8IElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzcGVjcy5sZW5ndGg7IGorKykgewotCQkJCQlTdHJpbmcgZmlsZXNwZWMgPSBmaWxlc3BlY3Nbal07Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAiICsgZmlsZXNwZWMpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhZDU4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJQcm9qZWN0VGVzdEZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJLy9mQ3JlYXRlZFByb2plY3RzLmFkZChmb2xkZXJQYXRoKTsKLQkJCQlJSW1wb3J0U3RydWN0dXJlUHJvdmlkZXIgcHJvdmlkZXIgPSBGaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXIuSU5TVEFOQ0U7Ci0JCQkJSU92ZXJ3cml0ZVF1ZXJ5IG92ZXJ3cml0ZUltcGxlbWVudG9yID0gbmV3IE15T3ZlcndyaXRlUXVlcnkoKTsKLQkJCQlGaWxlW10gZmlsZXNUb0ltcG9ydCA9IHtmaWxlVG9JbXBvcnR9OwotCQkJCUltcG9ydE9wZXJhdGlvbiBpbXBvcnRPcCA9IG5ldyBJbXBvcnRPcGVyYXRpb24oY29udGFpbmVyUGF0aCwgbnVsbCwgcHJvdmlkZXIsIG92ZXJ3cml0ZUltcGxlbWVudG9yLCBBcnJheXMuYXNMaXN0KGZpbGVzVG9JbXBvcnQpKTsKLQkJCQlpbXBvcnRPcC5zZXRDcmVhdGVDb250YWluZXJTdHJ1Y3R1cmUoZmFsc2UpOwotCQkJCWltcG9ydE9wLnNldE92ZXJ3cml0ZVJlc291cmNlcyh0cnVlKTsKLQkJCQlpbXBvcnRPcC5ydW4oaW1wb3J0UHJvZ3Jlc3MpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgc291cmNlIGRvZXNuJ3QgZXhpc3QiKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWltcG9ydFByb2dyZXNzLmRvbmUoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRoZSBmb2xsb3dpbmcgaXMgbG9naWMgZnJvbQotCSAqIGh0dHA6Ly93d3cuZGV2c2hlZC5jb20vYy9hL0phdmEvWmlwLU1lZXRzLUphdmEvMi8KLQkgKi8KLQkvLyBzcGVjaWZ5IGJ1ZmZlciBzaXplIGZvciBleHRyYWN0aW9uCi0Jc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAyMDQ4OwotCi0JcHVibGljIHZvaWQgdW56aXBBbmRJbXBvcnQoRmlsZSBpbkZpbGUsIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSkgewotCQl0cnkgewotCQkJLy8gU3BlY2lmeSBmaWxlIHRvIGRlY29tcHJlc3MKLQkJCVN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBTcGVjaWZ5IGRlc3RpbmF0aW9uIHdoZXJlIGZpbGUgd2lsbCBiZSB1bnppcHBlZAotCQkJLy9TdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkgPQotCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCQkJSVByb2plY3QgY3VycmVudFByb2plY3QgPSBudWxsOwotCQkJLy8gUHJvY2VzcyBlYWNoIGVudHJ5Ci0JCQl3aGlsZSAoemlwRmlsZUVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQlaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSkgemlwRmlsZUVudHJpZXMubmV4dEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgY3VycmVudEVudHJ5ID0gZW50cnkuZ2V0TmFtZSgpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCUZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQlib29sZWFuIGVvZiA9IGZhbHNlOwotCQkJCQlpbnQgbkJ5dGVzID0gMDsKLQkJCQkJd2hpbGUgKCFlb2YpIHsKLQkJCQkJCW5CeXRlcyA9IGlzLnJlYWQoZGF0YSwgMCwgQlVGRkVSKTsKLQkJCQkJCWlmIChuQnl0ZXMgIT0gLTEpIHsKLQkJCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIG5CeXRlcyk7Ci0JCQkJCQl9Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQllb2YgPSB0cnVlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWRlc3QuZmx1c2goKTsKLQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQlmaWxlT3V0cHV0U3RyZWFtLndyaXRlKGRlc3QudG9CeXRlQXJyYXkoKSk7Ci0JCQkJCWZpbGVPdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkvLyB1bmxpa2UgdmVyc2lvbiBpbiBzc2UudGVzdHMsIHdlIGRvbid0IGNyZWF0ZSBwcm9qZWN0Ci0JCQkJCS8vIGZvcgotCQkJCQkvLyBldmVyeSBkaXJlY3RvcnkKLQkJCQkJLy8JCQkJCWlmKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJLy8JCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJLy8JCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQkJCi0JCQkJCS8vCQkJCQkJY3VycmVudFByb2plY3QgPQotCQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YSBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkN2Y3ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjUyMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRTdHJlYW1DcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ1J1bGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29kZWRXcml0ZSBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKiogQSB0YWJsZSBvZiBoZXggZGlnaXRzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIGhleERpZ2l0ID0geycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ307Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nQnVmZmVyIHNCdWZmID0gbmV3IFN0cmluZ0J1ZmZlcigyKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBieXRlVG9IZXgoYnl0ZSBieXRlY2hhcikgewotCQlzQnVmZi5zZXRMZW5ndGgoMCk7Ci0JCWludCBsb3cgPSBieXRlY2hhciAmIDB4RjsKLQkJaW50IGhpID0gKGJ5dGVjaGFyID4+IDQpICYgMHhGOwotCQlzQnVmZi5hcHBlbmQodG9IZXgoaGkpKTsKLQkJc0J1ZmYuYXBwZW5kKHRvSGV4KGxvdykpOwotCQlyZXR1cm4gc0J1ZmYudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IGEgbmliYmxlIHRvIGEgaGV4IGNoYXJhY3RlcgotCSAqIAotCSAqIEBwYXJhbSBuaWJibGUKLQkgKiAgICAgICAgICAgIHRoZSBuaWJibGUgdG8gY29udmVydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjaGFyIHRvSGV4KGludCBuaWJibGUpIHsKLQkJcmV0dXJuIGhleERpZ2l0WyhuaWJibGUgJiAweEYpXTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkV3JpdGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkV3JpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBqc3AgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktM1wiJT4iOwotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS5qc3AiLCBqc3ApOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlIiwganNwLCAiSVNPLTg4NTktMyIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRlYnVnUHJpbnQoU3RyaW5nIHRlc3RuYW1lLCBTdHJpbmcgb3JpZ2luYWxTdHJpbmcsIFN0cmluZyBlbmNvZGluZywgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RuYW1lKTsKLQkJYnl0ZVtdIGJ5dGVzID0gb3V0cHV0U3RyZWFtLnRvQnl0ZUFycmF5KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoYnl0ZVRvSGV4KGJ5dGVzW2ldKSk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCWlmIChlbmNvZGluZyA9PSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhieXRlcykpOwotCi0JCX0KLQkJZWxzZSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhieXRlcywgZW5jb2RpbmcpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVVVEYxNkJFKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtMTZCRVwiJT4iOwotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS5qc3AiLCBqc3ApOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlVVRGMTZCRSIsIGpzcCwgIlVURi0xNkJFIiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlcigpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCVN0cmluZyB4bWxTdHJpbmcgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLTE2XCI/Pjx0YWc+dGVzdCB0ZXh0PC90YWc+IjsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkueG1sIiwgeG1sU3RyaW5nKTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvZGVkU3RyZWFtQ3JlYXRvci5nZXRDb2RlZEJ5dGVBcnJheU91dHB1dFN0cmVhbShFbmNvZGluZ1J1bGUuQ09OVEVOVF9CQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJZGVidWdQcmludCgidGVzdFNpbXBsZXIiLCB4bWxTdHJpbmcsICJVVEYtMTYiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVzdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCVN0cmluZyB0ZXh0ID0gInRlc3QgdGV4dCI7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LnhtbCIsIHRleHQpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlc3QiLCB0ZXh0LCBudWxsLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMWM4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxFbmNvZGluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlUm9vdCA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gInhtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQotCXB1YmxpYyBYTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTEiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwgaXQgYXBwZWFycyAKLQkgKiBpbmNvcnJlY3QgKGR1ZSB0byBmb250IHByb2JsZW1zIGluIGNvbnNvbGUpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKiBOb3RlOiBVVEYtMTYgPT0gVVRGLTE2QkUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGODNCeXRlQk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00ueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZMRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZU1hbGZvcm1lZC54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzYzM3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gInhtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmRW5jb2RpbmcgPSBudWxsOwotCXByaXZhdGUgSGVhZFBhcnNlclRva2VuIGZGaW5hbFRva2VuOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZXhwZWN0ZWRGaW5hbFRva2VuVHlwZSkgewotCi0JCVhNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIiArIGZpbGVuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIgPSBUZXN0c1BsdWdpbi5nZXRCeXRlUmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBYTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBhcnNlKHRva2VuaXplcik7Ci0JCQlyZXN1bHRWYWx1ZSA9IGZFbmNvZGluZzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIEhlYWQgVG9rZW5pemVyIEZvdW5kIEVuY29kaW5nOiAiICsgcmVzdWx0VmFsdWUpOwotCQkJfQotCQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgc2Nhbm5pbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIGZGaW5hbFRva2VuLmdldFR5cGUoKSwgZXhwZWN0ZWRGaW5hbFRva2VuVHlwZS5lcXVhbHMoZkZpbmFsVG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQkvLyBUT0RPOiB0aGlzIHRlc3QgYnJhbmNoIG5lZWRzIHRvIGJlIGltcHJvdmVkIC4uLiBkb2Vzbid0Ci0JCQkJLy8gZmFpbAotCQkJCS8vIGFzIGl0IHNob3VsZAotCQkJCS8vIChzdWNoIGFzIHdoZW4gdG9rZW5pemVyIGNoYW5nZWQgdG8gcmV0dXJuIGVhcmx5IHdoZW4KLQkJCQkvLyBVbmljb2RlCi0JCQkJLy8gc3RyZWFtIGZvdW5kKS4KLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFZhbHVlID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZSkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGFyc2UoWE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCVN0cmluZyB0b2tlblR5cGUgPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCXRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCS8vIG5vcm1hbGx5ICJwYXJzaW5nIiB0aGUgdG9rZW5zIHNob3VsZCBiZSBkb25lIGJ5IHBhcnNlcgotCQkJLy8gQHNlZSwgWE1MUmVzb3VyY2VFbmNvZG9pbmdEZXRlY3RvcgotCQkJLy8gYnV0IHdlJ2xsCi0JCQkvLyBkbyBpdCBoZXJlIGZvciBhIGxpdHRsZQotCQkJLy8gbW9yZSBpbmRlcGVuZGVudCB0ZXN0LgotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFKSB7Ci0JCQkJZkVuY29kaW5nID0gIlVURjE2QkVJblN0cmVhbSI7Ci0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2TEUpIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGMTZMRUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGODNCeXRlQk9NKSB7Ci0JCQkJZkVuY29kaW5nID0gIlVURjgzQnl0ZUJPTUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQl0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHRva2VuVHlwZSkpIHsKLQkJCQkJCWZFbmNvZGluZyA9IHRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCS8vIGZvciB0ZXN0aW5nCi0JCWZGaW5hbFRva2VuID0gdG9rZW47Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTm9ybWFsIFhNTERlY2xhcmF0aW9uIHdpdGggZGVmYXVsdCBlbmNvZGluZyBzcGVjaWZpZWQgKFVURi04KQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb3JtYWxDYXNlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyBpcyBhIFVURi0xNiBmaWxlIChVbmljb2RlIGJ5dGVzIGluIEJPTSkuIFNvLCB0aGUgdG9rZW5pemVyIGJ5Ci0JICogaXRzZWxmIGNhbid0IHJlYWQgY29ycmVjdGx5LiBSZXR1cm5zIG51bGwgaW4gInB1cmUiIHRva2VuaXplciB0ZXN0LCBidXQKLQkgKiBlbmNvZGluZyBkZXRlY3RvciBjYXNlIHNob3VsZCBzdGlsbCBoYW5kbGUgc2luY2UgbG9va3MgZm9yIGJ5dGVzIGZpcnN0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RVVEYxNi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZCRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogSnVzdCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY2hva2Ugb24gZW1wdHkgZmlsZS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEVVQ0pQKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZXVjanAueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIkVVQy1KUCIpOwotCX0KLQotCS8qKgotCSAqIEV4dGVuZGVkIFhNTCBEZWNsYXJhdGlvbiB0aGF0IGNvbnRhaW5zICdzdGFuZGFsb25lJyBhdHRyaWJ1dGUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXh0cmFBdHRyQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBBIGNhc2Ugd2l0aCBhIHZhbGlkIGVuY29kaW5nLCBidXQgZXh0cmEgYXR0cmlidXRlcyB3aGljaCBhcmUgbm90Ci0JICogdmFsaWQvbWVhbmluZ2Z1bC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXh0cmFKdW5rQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RFeHRyYUp1bmsueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIDIgcXVvdGVzLCBvbmUgYW5kIGVuZCBvZiB2ZXJzaW9uIHZhbHVlIGFuZCBvbmUgYXQgYmVnaW5uaW5nIG9mCi0JICogZW5jb2RpbmcgdmFsdWUuIEluIHRoaXMgY2FzZSwgdG9rZW5pemVyIGhhbmRsZXMgYXMgdW5kZWxpbWl0ZSBzdHJpbmcsCi0JICogYnV0IGlmIHdlIGV2ZXIgbW9kaWZpeSB0byBhbHNvIGxvb2sgZm9yICd2ZXJzaW9uJywgdGhlbiB3b3VsZCBub3Qgd29yawotCSAqIHRoZSBzYW1lLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgWE1MRGVjbCBlbmQgdGFnIC4uLiB3ZSBzaG91bGQgYmUgYWJsZSB0byBzYWZlbHkgZ3Vlc3MuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIGVuZCBxdW90ZSBvbiBVVEYtOCBhdHRyaWJ1dGUsIHNvIHBpY2tzIHVwIGZvbGxvd2luZyBhdHRyaWJ0ZQotCSAqIHRvby4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQzLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCBzdGFuZGFsb25lPSIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgZW5kIHF1b3RlIG9uIFVURi04IGF0dHJpYnV0ZSwgYnV0IHRoZW4gWE1MRGVjbEVuZHMsIHNvIHNob3VsZAotCSAqIGJlIGFibGUgdG8gaGFuZGxlCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkNC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IG9mIG1pc3NpbmcgZW5kIHF1b3RlIG9uIGVuY29kaW5nIHZhbHVlLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIEVtcHR5IHN0cmluZyBhcyBlbmNvZGluZyB2YWx1ZTsgKEFuZCwgbWFsZm9ybWVkIGlucHV0LCBmb3IgVVRGLTggLi4uCi0JICogc2hvdWxkIG5vdCBlZmZlY3QgcmVzdWx0cyBvZiB0aGlzIGxldmVsIG9mIHRlc3QpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiIik7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgc3RyaW5nIGFzIGVuY29kaW5nIHZhbHVlOyAoQW5kLCBtYWxmb3JtZWQgaW5wdXQsIGZvciBVVEYtOCAuLi4KLQkgKiBzaG91bGQgbm90IGVmZmVjdCByZXN1bHRzIG9mIHRoaXMgbGV2ZWwgb2YgdGVzdCkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmdYU0woKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhzbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBYTUxEZWNsYXJhdGlvbiBub3QgYWxsIG9uIHNhbWUgbGluZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aUxpbmVDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE11bHRpTGluZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCi0JfQotCi0JLyoqCi0JICogTm8gZW5jb2RpbmcgaW4gWE1MRGVjbGFyYXRpb24KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogP0lzIHRoaXMgYSBkdXA/Ci0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmdDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3JtYWwgWE1MRGVjbGFyYXRpb24gd2l0aCBJU08tMSBzcGVjaWZpZWQKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQl9Ci0KLQkvKioKLQkgKiBObyBYTUxEZWNsYXJhdGlvbiBhdCBhbGwuIChJbnZhbGlkLCBidXQgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gcGFyc2UpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2woKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEhhcmQgdG8gaGFuZGxlIHNhZmVseSAobWF5IGFwcGVhciBpbiBjb21tZW50LCBmb3IgZXhhbXBsZSkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbEF0Rmlyc3QoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3QgaXMganVzdCB0byBtYWtlIHN1cmUgdGhlIHNjYW5uaW5nIGVuZHMgYmVmb3JlIGVuZCBvZiBmaWxlIGlzCi0JICogcmVhY2hlZC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuTUFYX0NIQVJTX1JFQUNIRUQpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdHNoaWZ0amlzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAic2hpZnRqaXMueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlNoaWZ0X0pJUyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2TEVXaXRoSmFwYW5lc2VDaGFycygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkxFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0aW5nIGFzIGEgcmVzdWx0IG9mIENNVkMgZGVmZWN0IDIxNzcyMAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJFV2l0aEphcGFuZXNlQ2hhcnMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2QkVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIEEgY29tbW9uIGNhc2UuCi0JICogCi0JICovCi0JIHB1YmxpYyB2b2lkIHRlc3RVVEY4V2l0aDNCeXRlQk9NKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGODNCeXRlQk9NSW5TdHJlYW0iKTsKLQl9Ci0JcHVibGljIHZvaWQgVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2TEVJblN0cmVhbSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJFKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVNYWxmb3JtZWQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRU1hbGZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmUwOTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEZJWE1FOiB0aGlzIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjcmVhdGUgYSAiZmlsZSBwZWVrZXIiPyBCdXQsCi0gKiBpdHMgbm90IG90aGVyd2lzZWQgdXNlZCAtLSBkZWxldGUgaWYgbm90IGZpeGVkL2ltcHJvdmVkIHNvb24KLSAqIFhNTE1hbGZvcm1lZElucHV0VGVzdHMKLSAqLwotCi1wdWJsaWMgY2xhc3MgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCi0JcHVibGljIFhNTE1hbGZvcm1lZElucHV0VGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZm9yIGEgZmlsZSwgZmlsZW5hbWUgdGhhdCBzaG91bGQgdGhyb3cgYQotCSAqIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCBhdCBjaGFyYWN0ZXIsIGV4cGVjdGVkUG9zaXRpb24uIFRoaXMKLQkgKiBoYXBwZW5zIHdoZW4gbm8gZW5jb2RpbmcgaXMgc3BlY2lmaWVkLCBzbyB0aGUgZGVmYXVsdCBpcyB1c2VkLCBidXQKLQkgKiB0aGVyZSBhcmUgY2hhcmFjdGVycyB0aGF0IHRoZSBkZWZhdWx0IGVuY29kaW5nIGRvZXMgbm90IHJlY29nbml6ZQotCSAqLwotCXZvaWQgZG9UZXN0TWFsZm9ybWVkSW5wdXQoU3RyaW5nIGZpbGVuYW1lLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IsIGludCBleHBlY3RlZFBvc2l0aW9uKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlFeGNlcHRpb24gZm91bmRFeGNlcHRpb24gPSBudWxsOwotCQlpbnQgYmFkQ2hhclBvc2l0aW9uID0gLTE7Ci0JCUZpbGUgZmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkvLyBJRW5jb2RlZERvY3VtZW50IGRvYyA9Ci0JCS8vIGRldGVjdG9yLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlbmFtZSwgaXN0cmVhbSk7Ci0JCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcikgZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0KLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0KLQkJLy8gbm93LCB0cnkgcmVhZGluZyBhcyBwZXIgZW5jb2RpbmcKLQkJaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBza2lwIEJPTSBmb3IgdGhpcyBjYXNlCi0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCi0JCXRyeSB7Ci0JCQkvLyBqdXN0IHRyeSByZWFkaW5nIC4uLiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uCi0JCQkvLyBleGNlcHRpb24pCi0JCQlyZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJfQotCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJLy8gYXMgZXhwZWN0ZWQsIG5vdyBkbyBkZXRhaWxlZCBjaGVja2luZy4KLQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCQljaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQlyZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJCWlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJCXRyeSB7Ci0JCQkJaGFuZGxlTWFsRm9ybWVkSW5wdXRfRGV0YWlsQ2hlY2tpbmcocmVhZGVyLCBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIHNlKSB7Ci0JCQkJZm91bmRFeGNlcHRpb24gPSBzZTsKLQkJCQliYWRDaGFyUG9zaXRpb24gPSBzZS5nZXRDaGFyUG9zaXRpb24oKTsKLQkJCX0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JCS8vIGhhbmRsZSBhZGp1c3RtZW50cyBoZXJlIGZvciBWTSBkaWZmZXJuY2VzOgotCQkvLyBmb3Igbm93IGl0cyBlaXRoZXIgNDkgb3IgNDkgKyAyIEJPTXMgKDUxKQotCQkvLyBjYW4gYmUgc21hcnRpbmcgbGF0ZXIuCi0JCWFzc2VydFRydWUoIk1hbGZvcm1lZElucHV0RXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIGFzIGV4cGVjdGVkIGZvciBmaWxlbmFtZTogIiArIGZpbGVuYW1lICsgIiBFeGNlcHRpb24gdGhyb3duOiIgKyBmb3VuZEV4Y2VwdGlvbiwgZm91bmRFeGNlcHRpb24gaW5zdGFuY2VvZiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwpOwotCQlhc3NlcnRUcnVlKCJXcm9uZyBjaGFyYWN0ZXIgcG9zaXRpb24gZGV0ZWN0ZWQgaW4gTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24uICBFeHBlY3RlZDogIiArIGV4cGVjdGVkUG9zaXRpb24gKyAiIEZvdW5kOiAiICsgYmFkQ2hhclBvc2l0aW9uLCAoYmFkQ2hhclBvc2l0aW9uID09IGV4cGVjdGVkUG9zaXRpb24pIHx8IGJhZENoYXJQb3NpdGlvbiA9PSBleHBlY3RlZFBvc2l0aW9uIC0gMik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdFhTTE1hbGZvcm1lZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiOwotCS8vIGRvVGVzdE1hbGZvcm1lZElucHV0KGZpbGVuYW1lLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCksIDIxMSk7Ci0JLy8gfQotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRCdWZmWzBdKTsKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoKLQkgKiByZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTQotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLQkgKi8KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0WE1MTWFsZm9ybWVkSW5wdXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhtbCI7Ci0JLy8gZG9UZXN0TWFsZm9ybWVkSW5wdXQoZmlsZW5hbWUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSwgNTEpOwotCS8vIH0KLQkvLyBzaW5jZSBhYm92ZSB0ZXN0IHdhcyBvbmx5IG9uZSBpbSB0aGlzIGNsYXNzLCBwdXQgaW4gdGhpcyBubyBvcCB0byBhdm9pZAotCS8vIGEgZmFpbHVyZSBkdWUgdG8gbm8gdGVzdHMgaW4gY2xhc3MhCi0JcHVibGljIHZvaWQgdGVzdE5vT3AoKSB7Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZU1hbEZvcm1lZElucHV0X0RldGFpbENoZWNraW5nKFJlYWRlciByZWFkZXIsIFN0cmluZyBlbmNvZGluZ05hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIHsKLQkJaW50IGNoYXJQb3N0aW9uID0gLTE7Ci0JCWNoYXJQb3N0aW9uID0gZ2V0Q2hhclBvc3Rpb25PZkZhaWx1cmUocmVhZGVyKTsKLQkJLy8gYWxsIG9mIHRoYXQganVzdCB0byB0aHJvdyBtb3JlIGFjY3VyYXRlIGVycm9yCi0JCS8vIG5vdGU6IHdlIGRvIHRoZSBjb252ZXJzaW9uIHRvIGlhbmFOYW1lLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBsb2NhbAotCQkvLyB2YXJpYWJsZSwKLQkJLy8gYmVjYXVzZSB0aGlzIGlzIHVsdGltYXRlbHkgb25seSBmb3IgdGhlIHVzZXIgZXJyb3IgbWVzc2FnZSAodGhhdAotCQkvLyBpcywKLQkJLy8gdGhlIGVycm9yIG9jY3VycmVkCi0JCS8vIGluIGNvbnRleHQgb2YgamF2YUVuY29kaW5nTmFtZSBubyBtYXR0ZXIgd2hhdCBpYW5hRW5jb2RpbmdOYW1lIGlzCi0JCXRocm93IG5ldyBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwoZW5jb2RpbmdOYW1lLCBjaGFyUG9zdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0Q2hhclBvc3Rpb25PZkZhaWx1cmUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaW50IGNoYXJQb3NpdGlvbiA9IDE7Ci0JCWludCBjaGFyUmVhZCA9IC0xOwotCQlpbnQgcmVzdWx0ID0gLTE7Ci0JCWJvb2xlYW4gZXJyb3JGb3VuZCA9IGZhbHNlOwotCQlkbyB7Ci0JCQl0cnkgewotCQkJCWlmIChyZWFkZXIucmVhZHkoKSkgewotCQkJCQljaGFyUmVhZCA9IHJlYWRlci5yZWFkKCk7Ci0JCQkJfQotCQkJCWlmIChERUJVRykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhclBvc2l0aW9uICsgIjogIiArIGVzY2FwZSgoY2hhcikgY2hhclJlYWQsIHRydWUpKTsKLQkJCQl9Ci0JCQkJY2hhclBvc2l0aW9uKys7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJCS8vIHRoaXMgaXMgZXhwZWN0ZWQsIHNpbmNlIHdlJ3JlIGV4cGVjdGluZyBmYWlsdXJlLAotCQkJCS8vIHNvIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCi0JCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKChjaGFyUmVhZCAhPSAtMSAmJiAhZXJyb3JGb3VuZCkgJiYgcmVhZGVyLnJlYWR5KCkpOwotCi0JCWlmIChlcnJvckZvdW5kKQotCQkJcmVzdWx0ID0gY2hhclBvc2l0aW9uOwotCQllbHNlCi0JCQlyZXN1bHQgPSAtMTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBlc2NhcGUoY2hhciBhQ2hhciwgYm9vbGVhbiBlc2NhcGVTcGFjZSkgewotCi0JCVN0cmluZ0J1ZmZlciBvdXRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN3aXRjaCAoYUNoYXIpIHsKLQkJCWNhc2UgJyAnIDoKLQkJCQlpZiAoZXNjYXBlU3BhY2UpCi0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0KLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCcgJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcXCcgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1x0JyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCd0Jyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcbicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnbicpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXHInIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3InKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xmJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdmJyk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0IDoKLQkJCQlpZiAoKGFDaGFyIDwgMHgwMDIwKSB8fCAoYUNoYXIgPiAweDAwN2UpKSB7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3UnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gMTIpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDgpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDQpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoYUNoYXIgJiAweEYpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmIChzcGVjaWFsU2F2ZUNoYXJzLmluZGV4T2YoYUNoYXIpICE9IC0xKQotCQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZChhQ2hhcik7Ci0JCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG91dEJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCi0JICogCi0JICogQHBhcmFtIG5pYmJsZQotCSAqICAgICAgICAgICAgdGhlIG5pYmJsZSB0byBjb252ZXJ0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgewotCQlyZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOwotCX0KLQotCS8qKiBBIHRhYmxlIG9mIGhleCBkaWdpdHMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3BlY2lhbFNhdmVDaGFycyA9ICI9OiBcdFxyXG5cZiMhIjsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Njk4MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5FbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNGM0MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTU3MGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCUtLSBqc2Y6Y29kZUJlaGluZCBsYW5ndWFnZT0iamF2YSIgbG9jYXRpb249Ii9KYXZhU291cmNlL3BhZ2Vjb2RlL3Rlc3QvS2FlcnU1LmphdmEiIC0tJT48JS0tIC9qc2Y6Y29kZUJlaGluZCAtLSU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPgotPEhUTUw+Ci08SEVBRD4KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+Ci08JUAgcGFnZSAKLWxhbmd1YWdlPSJqYXZhIgotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiCi1wYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIKLSU+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vdGhlbWUvc3R5bGVzaGVldC5jc3MiCi0JdGl0bGU9IlN0eWxlIj4KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPgotPC9IRUFEPgotPGY6dmlldz4KLQk8Qk9EWT4KLQk8aHg6c2NyaXB0Q29sbGVjdG9yIGlkPSJzY3JpcHRDb2xsZWN0b3IxIj4KLQkJPGg6Zm9ybSBzdHlsZUNsYXNzPSJmb3JtIiBpZD0iZm9ybTEiPgotCQkJj7OURgotCQkJj7OURgotCQkJj7OURgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Io/YjJSO5oj4j4oiIGl0ZW1MYWJlbD0ij9iMlI7miPiPiiIgLz4KLQkJCTwvaDpzZWxlY3RPbmVNZW51PgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMSIgc3R5bGVDbGFzcz0iQ29tYm8zMSIgdGFiaW5kZXg9IjI3Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPgotCQkJPC9oOnNlbGVjdE9uZU1lbnU+Ci0JCTwvaDpmb3JtPgotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPgotCTwvQk9EWT4KLTwvZjp2aWV3PgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM3MDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTwlLS0ganNmOmNvZGVCZWhpbmQgbGFuZ3VhZ2U9ImphdmEiIGxvY2F0aW9uPSIvSmF2YVNvdXJjZS9wYWdlY29kZS90ZXN0L0thZXJ1NS5qYXZhIiAtLSU+PCUtLSAvanNmOmNvZGVCZWhpbmQgLS0lPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiIHByZWZpeD0iaCIlPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiDQotcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3RoZW1lL3N0eWxlc2hlZXQuY3NzIg0KLQl0aXRsZT0iU3R5bGUiPg0KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Zjp2aWV3Pg0KLQk8Qk9EWT4NCi0JPGh4OnNjcmlwdENvbGxlY3RvciBpZD0ic2NyaXB0Q29sbGVjdG9yMSI+DQotCQk8aDpmb3JtIHN0eWxlQ2xhc3M9ImZvcm0iIGlkPSJmb3JtMSI+DQotCQkJj7OURg0KLQkJCY+zlEYNCi0JCQmPs5RGDQotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ij9iMlI7miPiPiiIgaXRlbUxhYmVsPSKP2IyUjuaI+I+KIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzEiIHN0eWxlQ2xhc3M9IkNvbWJvMzEiIHRhYmluZGV4PSIyNyI+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJPC9oOmZvcm0+DQotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPg0KLQk8L0JPRFk+DQotPC9mOnZpZXc+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNTFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGMwNWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjdjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOTRmZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2RkNjc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmU1YTUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DRVNVLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3YTU0NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJDRVNVLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNPTVBPVU5EX1RFWFQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGZiNzEyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJDT01QT1VORF9URVhUIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MGIxNmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Mzk3NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTkyOWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMTNjMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IxODAzMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMjMxMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ5MmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMjMxMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCSy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiZDQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc3YmE3NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDA2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDA2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDk1OGU5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3M2QzYWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM0MGMxOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQ2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDZTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTIwYTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2E1MWEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwODgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwODgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTM0NDMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA5OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA5OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzY2VmNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMTE0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI5MGIxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTExMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTk2YzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTEyNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTEyNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY3MmE1ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzYzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjNDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxODEyNGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNjNDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODM5Yzg5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYzkwZTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM4MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZjI4YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzgzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWQ5OWNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzODYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0zMzcyMkMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjU5MmViLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMzM3MjJDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNDM3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNGVmMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTQzNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTczNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiODUzNWYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS03MzciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03NzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM5NDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tNzc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAyOGZjZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTgwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODdkOTEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTk0ZDVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzNTQ3Yy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTRiNWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTIwYzkxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZjE0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWIyNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjgyMjkzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MTBlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYTcxMTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTY3MzU3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzZTU3Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzYWViOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjRTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjRTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3ZDVkYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZmEyNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWY2NzUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzODAxYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWUwYzEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NzQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2MyNTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODc0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODk3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiMTU5Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg5NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NDE3ZTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05MjEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDZiODI2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTIyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NmZlMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTkzMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzM2U1YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyM2UzOGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQyQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTQyNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYTkxZWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQzQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZGEyMjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzVhY2RiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmY0NWM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OUMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0OUMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjU2NmIxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTY1YzE0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1NEMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk1NEMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NmI1OWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi1HQi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1DTi1HQiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNmM2RhMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY3YzE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzgwNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGFiODMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDc0OTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzg5OWNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDZmZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmNTdkOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxODVjMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQ5NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5OTM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NmJmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDQ0YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWFkOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MjMzZDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJUzAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDk5MzRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjEyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyOWY2My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTMDIxMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwN2NjYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpvaGFiLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpvaGFiIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVJVLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjZGRhMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SVSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtVS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQ4ZjNjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtVSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS1NDNTYwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NTk0NzkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktTQzU2MDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNBcmFiaWMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlMDI3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNBcmFiaWMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0NlbnRyYWxFdXJvcGUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmIwZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDZW50cmFsRXVyb3BlIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTBhYjNhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3JvYXRpYW4ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjQ3JvYXRpYW4iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZTNjOTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDeXJpbGxpYy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDeXJpbGxpYyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRmYWQ2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0dyZWVrLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0dyZWVrIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSGVicmV3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYjU0OTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjSGVicmV3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNJY2VsYW5kLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhZDQ3ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjSWNlbGFuZCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZjBkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1JvbWFuIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbmlhLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2YTRiOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjUm9tYW5pYSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVGhhaS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNGRhY2YuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1RoYWkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1R1cmtpc2gueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2Q2ODI2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNUdXJraXNoIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNVa3JhaW5lLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiYzk1My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjVWtyYWluZSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtUFRDUDE1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNzY3YmEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlBUQ1AxNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNGU2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQzMmE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJUSVMtNjIwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2VhOGIwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5ZGM1Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzU4YzBiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMmUwZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwZDUwOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGE5YmYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyQkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwYTdmOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmYzYmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04Si54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDY2NTlkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04SiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUJpZy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTFiNzBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVMaXR0bGUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE0YjliYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtaHAtcm9tYW44LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOTgzMDQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaHAtcm9tYW44Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDY1NmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYmMwYzMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWM1ODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTZhZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDYyOGYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjcyNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTAwNDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTZTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4NzI2NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk1YTYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM1ZTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjM2QxMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtODc0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtODc0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2YyNmI1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05MzIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NzlmY2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTkzNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkMzQ4MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2MzYmM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzRkZGRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAgQEAKLTEzMQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwMzI0ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmU1YTUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOTc3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlOTI5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmExM2MwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IxODAzMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCSy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYmJkNDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY3YzE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzgwNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGFiODMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2VkNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNmZkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxODVjMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQ5NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0zIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5OTM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NmJmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDQ0YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU5NWQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZDMwMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODM5MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS05Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhNDJkOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjAxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzBiNzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjEyLTE5OTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzA0NWU2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI0ZTYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDMyYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJUSVMtNjIwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWE4YjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM1NTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNThjMGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyZTBkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2ZjNiYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDY1NmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYmMwYzMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWM1ODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTZhZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDYyOGYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjcyNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTAwNDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTVhNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzVlOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhjZmQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMzFqIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGM2NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4ZTM3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1UVyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDA3ZmQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSklTMDIwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVhZjg3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSm9oYWIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDZiMzEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LU1TOTUwLUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDNkZmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1ldWMtanAtbGludXgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZjEwYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LW1zd2luLTkzNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjOTNmNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OGU1M2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjY4ZjI0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi00OA0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNS1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjEyLTE5OTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTMxaiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LWV1Yy1qcC1saW51eCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1UVyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpJUzAyMDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1Kb2hhYiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LU1TOTUwLUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtbXN3aW4tOTM2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzMjRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNS1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM5Nzc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5MjliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTEzYzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiYmQ0Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2ZmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS03Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2E0MmQ4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3MGI3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMTItMTk5MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjRlNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMzJhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlYThiMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzU1MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1OGMwYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDJlMGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZmM2JiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NWE2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNWU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGNmZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0zMWoiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkYzY0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDhlMzdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLVRXIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMDdmZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1KSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmODdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1Kb2hhYiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwNmIzMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtTVM5NTAtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0M2RmYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LWV1Yy1qcC1saW51eCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJmMTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtbXN3aW4tOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM5M2Y0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZTUzYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNjhmMjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLTQ4DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1LUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMTItMTk5MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMzFqIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtZXVjLWpwLWxpbnV4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLVRXIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSklTMDIwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpvaGFiIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtTVM5NTAtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1tc3dpbi05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOGI1YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjYTYwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmNkZDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3MjExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwZTRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzMGM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTRjZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9dGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmQ1MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkNjJkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWZlNjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlZmI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmQwZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOD8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTclPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWViMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08dGFnPg0KLUF1c3RyYWxp6w0KLTwvdGFnPg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMzU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/Pg0KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCi0gICAgdmVyc2lvbj0iMS4wIg0KLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPg0KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPg0KLUF1c3RyYWxp6w0KLTwveHNsOnZhcmlhYmxlPg0KLTwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWNlNzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4OWU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249Ijk5IiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODYyNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdldEVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjdiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQ0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiAlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLUkgZm91bmQgdGhpcyBjaGFuZ2UNCi0NCi08JUAgcGFnZQ0KLWltcG9ydD0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iDQotIHBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUpVTksiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhMzljZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjI5NjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTciJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2Nzk4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICANCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMyIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWYyODdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDg2ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPCUNCi1TeXN0ZW0ub3V0LnByaW50bG4oInRlc3QiKTsNCi0lPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdmOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgYWJjZD0iZWZjIg0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0xIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDBhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZjkwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAgZW5jb2Rpbmc9VVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhlYzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggDQotPHRlc3Q+DQotPC90ZXN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkMGMxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAxNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+DQotDQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWEwYzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTx0ZXN0Pg0KLSA8JUAgcGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNDYzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+DQotDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLTwvdGVzdD4NCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTJjNDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNkJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGM5ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGJhOWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3MjM3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZiZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NzNjYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcyZjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlX3htbFN0eWxlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotSSBmb3VuZCB0aGlzIGNoYW5nZQ0KLQ0KLTwlQCBwYWdlDQotaW1wb3J0PSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiINCi0gcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SlVOSyINCi0lPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PU1FVEFKVU5LIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+UmVzdWx0cyBwYWdlPC9USVRMRT4NCi0NCi08IS0tU3R5bGVzLS0+DQotPFNUWUxFIFRZUEU9InRleHQvY3NzIj4NCi08IS0tDQotQk9EWSB7DQotCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsNCi19DQotSDEgew0KLQljb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50Ow0KLQl0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCi19DQotVEggew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1URCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVRILnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICM5OTk5OTkgIWltcG9ydGFudDsNCi19DQotVEQucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYzsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi0tLT4NCi08L1NUWUxFPg0KLQ0KLQ0KLTwhLS1TdHlsZSBTaGVldC0tPg0KLTxMSU5LIGhyZWY9Ii90L3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08anNwOnVzZUJlYW4gaWQ9InNlbENvbEJlYW5Sb3cxMkJlYW4iIHNjb3BlPSJzZXNzaW9uIiBjbGFzcz0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iIHR5cGU9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIi8+DQotPCUNCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0lPg0KLQ0KLTwlDQotLy9FeGVjdXRlIEJlYW4gTWV0aG9kcw0KLQ0KLQ0KLSU+DQotDQotPCEtLUJhbm5lci0tPg0KLTxIMT5SZXN1bHRzIHBhZ2U8L0gxPg0KLQ0KLTxCUj48QlI+DQotDQotPCEtLSBSZXN1bHQgVGFibGUgLS0+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotPFRCT0RZPg0KLQkJCTxUUj4NCi0JCQk8VEg+VEVTVDJfi42LjouPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfj4qPiY+PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfiY2JjomPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjVyNWo1fPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjo2Ojo6PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0NCi08L1RCT0RZPg0KLTwvVEFCTEUgPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzg3MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyIgcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjA1MWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08anNwOnJvb3QgeG1sbnM6anNwPSJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlIiB2ZXJzaW9uPSIxLjIiPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgbGFuZ3VhZ2U9ImphdmEiDQotCWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIgLz4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNISUZUX0pJUyIgPz4gXV0+PC9qc3A6dGV4dD4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4gXV0+PC9qc3A6dGV4dD4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotPGhlYWQ+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiAvPg0KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iIC8+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4NCi08bGluayBocmVmPSJ0aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiDQotCXR5cGU9InRleHQvY3NzIiAvPg0KLTx0aXRsZT50ZXN0c2hpZnRqaXMuanNwPC90aXRsZT4NCi08L2hlYWQ+DQotPGJvZHk+DQotPHA+UGxhY2UgdGVzdHNoaWZ0amlzLmpzcCdzIGNvbnRlbnQgaGVyZS48L3A+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCi08L2pzcDpyb290Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYjQ3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIHBhZ2VFbmNvZGluZz0iU2hpZnRfSklTIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyIlPg0KLTwlQHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3dlYnNpdGVkZXNpZ25lci50bGQiIHByZWZpeD0ic2l0ZWVkaXQiJT4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiDQotCWNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIEhvbWVwYWdlIEJ1aWxkZXIgVmVyc2lvbiA2LjUuMC4wIGZvciBXaW5kb3dzIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TaGlmdF9KSVMiPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxUSVRMRT5BdWRpIEE2jXeT/ILcgsU8L1RJVExFPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaWQ9IndlYnNpdGVfc3R5bGUiDQotCWhyZWY9Ii9BdWRpL3NpdGUtY29tcC9zdHlsZS9zaXRlLmNzcyI+DQotPC9IRUFEPg0KLTxCT0RZIHRleHQ9IiM2NjY2OTkiIGxpbms9IiM2NjY2Y2MiIHZsaW5rPSIjOTk5OTk5IiBhbGluaz0iI2NjNjZmZiI+DQotPHNpdGVlZGl0OmxheW91dD4NCi0JPHNpdGVlZGl0OmxheW91dGFyZWEgaWQ9ImJvZHkiPg0KLQkJPEgxPkF1ZGkgQTaNd5P8gtyCxTwvSDE+DQotDQotCQk8RElWIGFsaWduPSJsZWZ0Ij4NCi0JCTxUQUJMRSB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiPg0KLQkJCTxUQk9EWT4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIGhlaWdodD0iNSI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yC3ILFgsyMb4jcPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjExjI48L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB3aWR0aD0iNSI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSIyMTYiIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIiByb3dzcGFuPSIzIj48L1REPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST4yMDAxlE4xMYyOjaCBQY6fivpNeSBDYXKC8Iyfk6KCtY5ugt+C6YFCPC9MST4NCi0JCQkJCQk8TEk+l52XUoLNLi4uDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+MjAwMpRONIyOgsU1lE6W2oLwjH2CpoLpkU+O1IJ1go+CjIKWgo+CyY3XgqmCoozMj+GCqpGKjp+CooLEgqKCvYFCPC9MST4NCi0JCQkJCQkJPExJPoNHg5ODV4OTgsyU8ZfNgrOCyYnklp2CqoLFgquCyIKtgsiCwYLEgquCvYFCPC9MST4NCi0JCQkJCQk8L09MPg0KLQkJCQkJCTwvTEk+DQotCQkJCQkJPExJPojIibqCzI7Uju2CqozzleKCxoLIgsGCvYFCDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+Vk9MVk8gVjcwPC9MST4NCi0JCQkJCQkJPExJPkJXTSAzMjVpIHRvdXJpbmc8L0xJPg0KLQkJCQkJCQk8TEk+VlcgUGFzc2FydCBWNiA0IE1vdGlvbjwvTEk+DQotCQkJCQkJCTxMST5NZXJjZWRlcy1CZW56IEMgQ2xhc3MgV2Fnb248L0xJPg0KLQkJCQkJCQk8TEk+QXVkaSBBNCBBdmFudDwvTEk+DQotCQkJCQkJPC9PTD4NCi0JCQkJCQk8QlI+DQotCQkJCQkJgruCpIFCIIKxgsyOnpNfgsU8Qj6CYIJVgs2KrpFTgsiDWINSgVuDdopPPC9CPoLFgqCCwYK9gUI8L0xJPg0KLQkJCQkJPC9VTD4NCi0JCQkJCTwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPoKxgrGCqYLngUGIyIm6gsyXnZdSgqqO5YLFgUGM85XijtSCqo1pgueC6oK9gUI8QlI+DQotCQkJCQmBaYKggq2C3ILFguCOhILGjciCzIzCkGyTSY7lis+CyYLmguiC3IK3gUKBag0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST5WT0xWTyBWNzAgLSCDZoNVg0ODk4KqWILFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+QldNIDMyNWkgdG91cmluZyAtIJKGk3KUvJJbgsiDVINDg1mBQYpYkoZCV02CvoLngq+CxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPkMgQ2xhc3MgLSCJv4ppgsmMqY2Hgu2CyIKig0eDk4NXg5OBQZPgkZWCxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPlBhc3NhcnQgLSCJv4ppgs2Wo5fNk0mCvoKqk+CKT5GVg2aDVYNDg5OCxYN7g2OBQjwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJgruCpIFCgrGCsYLFPEI+jmOCwYK9gsyCzUE0IEF2YW50PC9CPoLFgrWCvYFCIDxCUj4NCi0JCQkJCUE0IDMuMCBxdWF0dHJvIHNwb3J0c4LJjo6P5oK1gUGCxoLEguCLQ4LJk/yCwYLEgrWC3IKigtyCtYK9gUI8QlI+DQotCQkJCQmCtYKpgrWUrZSEl1yS6ILNMjAwMpROMoyOgsaCzIKxgsaCxYFBgruCsYLcgsWR0oLGgqSCxojqk3iCzYyIgt+C3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCZdCiOqBQYtDgsmCyILBgsSCooK9gsyCzY66k+CCzINUg0ODWYLGg2eDiYOTg06XZZfKgqpWNzCCyZTkgteCqYLIguiPrIKzgq2CyILpgsaCooKkk1+CxYK1gr2BQjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjEyjI6Sho97PC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQ+PEJSPg0KLQkJCQkJMoyOgtyCxZHSgsaCpILGjnaCwYLEgqKC6Y/zkdSCxYFBQTSCzJLHicGP7pXxgvCTvoLmgqSCxo52gqKDZoNCgVuDiYFbgsmXp4K/ivGC6ILBgr2CxoKxguuBQZJTk5aCzIlji8aCzJX7gqqVc43dgsWTWJK3gsaYYoLwgrWC3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYK7grGCxYFBVk9MVk+CqYLngsyP5oLoireCpoFBicaRsI1ckKyBaTSQbIFqgvCNbIKmgumCxkE2gqqCqIqpgt+CxoLMgrGCxoFCIDxCPom/immNt4LgkZWU9ZOZgvCNbIKmgumCxkE0IEF2YW50DQotCQkJCQkzLjAgcXVhdHRybyBzdXBvcnSCxkE2IEF2YW50IDMuMCBxdWF0cnJvgsyNt4KqgtmCxoLxgseCyIKiPC9CPoLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmNWILJibqO5oLog0yDg4OTg3mBW4OTkoaCxYFBkbyKQ4pPg4GBW4NKgVuCqYLngsyO5pHWgqaCzI/qjYeBQY24kuiKeoF7PEI+glKCT5aciX48L0I+g3uBW4Npg1iCxoLIguiBQYLGgsGCxILggqiUg4Kik76KtIKqj2+C3IK3gUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCu4K1gsSBQZROk+CUW47UicKUXILIivOWXZBGgWmDVoOLg2+BW4OMg0ODToOBg16DioNig06BaoLMgmCCVYKqMZHkjd2MyYKqgqCC6YLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCxYFBjIuLx4KxgsyYYoLJj+aCwYLEKI/mgrmC54LqgsSBSIFqgUE8Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8NCi0JCQkJCTIwMDIgTW9kZWw8L0ZPTlQ+PC9CPoLwjXeT/IyIkuiCtYLcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yMiJLogUmBSTwvRk9OVD48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjxGT05UIGNvbG9yPSIjZmZmZmZmIj6Nd5P8jIiS6ILMl52XUoLwgtyCxoLfgumCxoFBPC9GT05UPoFBPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjIxNiIgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiPjwvVEQ+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPpG8gsyM85XijtSCxpTkinKCtYLEgUGDe4Nmg0KCqILmgtGO1JPgi/OK1ILMg2aDVYNDg5OC8JHlgqKCyYtDgsmT/ILBgr2BQjwvTEk+DQotCQkJCQkJPExJPoJgglOCxYLNgnWCVoJPgsmU5ILXjtST4INYg3mBW4NYgqqLt4KtgsiCwYLEgrWC3IKkgUI8L0xJPg0KLQkJCQkJCTxMST6DToNBg2eDjYFFg1aDWINlg4CBaXNraYKqju+WoYLIgsyCxYLigs2C6HNub3cgZHJpdmWCyYLNNFdEgqqXfoK1gq2CxC4uLik8L0xJPg0KLQkJCQkJCTxMST6SbIj4gquCxpPBlcqJuo7mguiDTIODg5ODeYFbg5OShoK+gsGCvY6WgUaBfIFqPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PEZPTlQNCi0JCQkJCQljb2xvcj0iI2ZmZmZmZiI+jXeT/IK1gr2DgoNmg4sggqiC5oLRIJLHicGDSYN2g1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIj48L1REPg0KLQkJCQkJPFREPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST6DgoNmg4sNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8gMjAwMiBNb2RlbDwvRk9OVD48L0I+DQotCQkJCQkJCTwvTEk+DQotCQkJCQkJCTxMST6P2oK1gq2CzYJggpWChIKJgsyDSYN0g0KDVoODg4uDeYFbg1eC8IKyl5eCrYK+grOCooFCKCA8QQ0KLQkJCQkJCQkJaHJlZj0iaHR0cDovL3d3dy5hdWRpLmNvLmpwL21vZGVscy9pbmRleC5odG1sIj5odHRwOi8vd3d3LmF1ZGkuY28uanAvbW9kZWxzL2luZGV4Lmh0bWw8L0E+DQotCQkJCQkJCSk8L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+g3uDZoNCgUWDSoOJgVsNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DVoOLg2+BW4OMg0ODToOBg16DioNig048L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+kseJwYNJg3aDVoOHg5MNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6Di4Fbg3SDQYOTg2WDaZdwg0GDk4NPg4uDWIN5gVuDVIFbIIFpi0CKQo6ukpOO1I/ql5iXcILMgr2C34FqPC9MST4NCi0JCQkJCQkJPExJPoOJg1GDYoNXg2eDjINDICiDWINMgVuUwoFFg3WBW4NjgUGOcYufgsyW7IuFk7mL74LwkM+C3Y2egt6CvYLfgsyTRI+cgq+XcIFqPC9MST4NCi0JCQkJCQkJPExJPoNvg5ODcIFblduM7Jdwg4mDb4FbIIFpjciCzJd2ll2CxS4uLi4uKTwvTEk+DQotCQkJCQkJCTxMST6DWINeg2KDaIOMg1iBRYNeg0ODhCAtIIN1g4qDV4NYg2eDkyCDdYOKg1WDYoNOPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjFzdCCDQ4OTg3aDjINig1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIiB2YWxpZ249InRvcCI+PElNRyBzcmM9ImltYWdlMjExLmpwZyINCi0JCQkJCQlib3JkZXI9IjAiIHdpZHRoPSIxOTUiIGhlaWdodD0iMTMwIj48L1REPg0KLQkJCQkJPFREPo13k/yMiJLogqmC54FBlE6WloLMjVGCvYK+grWCoo6eivqCxYK1gr2CqjKPVIrUgsaPrYK1gsSUW47UgUI8QlI+DQotCQkJCQkzk/qM44LJlWOP6oLJgnKCi4KJgsmNc4Ktl1yS6ILFgrWCvYLMgsWBQYNYg16DYoNog4yDWJGVkoWCtYLEguCC54KigtyCtYK9gUI8QlI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPjxGT05UIGNvbG9yPSIjZmYwMGZmIj48Rk9OVCBjb2xvcj0iI2ZmMDBmZiI+PEI+UHJvcy48L0I+PC9GT05UPjwvRk9OVD4NCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DWIOAgVuDWYLIg0eDk4NXg5OBQjwvTEk+DQotCQkJCQkJCTxMST6IwJLogrWCvZGWguiBaZRbjtSCtYLEM5P6jOOCzINYg22BW4FFg2iDiYNDg3WCzYLGgsSC4In1k0uCxYK1gr2BaoFCPC9MST4NCi0JCQkJCQkJPExJPo/jjr+CxY1MgqKOupPggUI8L0xJPg0KLQkJCQkJCQk8TEk+jnaCwYK9guaC6ILgiKuCrYLIgqKUUpTvgWmNgpGsgvCK3ILfgUGMu43dlb2LzzYuNUttL0yBQoFqPC9MST4NCi0JCQkJCQkJPExJPopYkoaCxYKggtyC6JOvgraO1ILwjKmCqYKvgsiCooFGgXyBajwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iIzAwMDAzMyI+Q29ucy48L0ZPTlQ+PC9CPg0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPpVXj4CTi43agsyCbYKBgpaCiYLJg3KBW4NSg5OCqpV0gqKCxIKigsiCooFCPEJSPg0KLQkJCQkJCQmBaY9hkdiP7pXxgqqCdYJogmKCcoK+gq+CxYLNlXOPXJWqgUKIyJFPjoSXcIK1gsSCooK9g3CDQ4NJg2qDQY7QIIp5g2mDcoLNl8eCqYLBgr2BQoFqPC9MST4NCi0JCQkJCQkJPExJPojZj+2CyIKtgueCopK8gq6NlYKtg4qDQYKqiZiC6oLpgUIgg2eDiYOTg06C8IpKgq+C6YLGjuiCqpBegsGNlYFCPC9MST4NCi0JCQkJCQkJPExJPoK/guWCwYLGgtOC7YLTgu2CtYK9kauJ8YLogUI8L0xJPg0KLQkJCQkJCQk8TEk+gnWCVoJPgsaU5ILXgUGMuILBgsSCtYLcgsGCvYNng4mDk4NOl2WXyoFCPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPoJQg5aMjoOMg3yBW4NngsmRsYKtLi4uLi4uLi48L0ZPTlQ+PEENCi0JCQkJCQlocmVmPSJhdWRpXzFtb250aC5odG1sIj48SU1HIHNyYz0iYjAxNmxpcy5naWYiIHdpZHRoPSIxNiINCi0JCQkJCQloZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvQT48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyIgaGVpZ2h0PSI1Ij48L1REPg0KLQkJCQk8L1RSPg0KLQkJCTwvVEJPRFk+DQotCQk8L1RBQkxFPg0KLQkJPC9ESVY+DQotCTwvc2l0ZWVkaXQ6bGF5b3V0YXJlYT4NCi08L3NpdGVlZGl0OmxheW91dD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA2OTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMT8+Ci08dGVzdD4KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTFiY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx0YWc+Ci1BdXN0cmFsaesKLTwvdGFnPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjY0ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPgotQXVzdHJhbGnrCi08L3hzbDp2YXJpYWJsZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDhhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlYzk4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlYzUzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ODExMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9ldWNqcC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTliZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PgotPFBlcnNvbj4KLQk8QWRkcmVzcz4KLQkJPENpdHk+wufPwjwvQ2l0eT4KLQkJPFN0YXRlPr/AxuDA7jwvU3RhdGU+Ci0JCTxaaXA+TTFDIDVDMjwvWmlwPgotCQk8Q291bnRyeT7G/MvcPC9Db3VudHJ5PgotCTwvQWRkcmVzcz4KLQk8TmFtZT4KLQkJPEZpcnN0PrDsz7o8L0ZpcnN0PgotCQk8TGFzdD7O68zaPC9MYXN0PgotCTwvTmFtZT4KLTwvUGVyc29uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTRiY2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz4KLTxQZXJzb24+Ci0JPEFkZHJlc3M+Ci0JCTxDaXR5PpHlmGE8L0NpdHk+Ci0JCTxTdGF0ZT6QX5PekOw8L1N0YXRlPgotCQk8WmlwPk0xQyA1QzI8L1ppcD4KLQkJPENvdW50cnk+k/qWezwvQ291bnRyeT4KLQk8L0FkZHJlc3M+Ci0JPE5hbWU+Ci0JCTxGaXJzdD6I6phZPC9GaXJzdD4KLQkJPExhc3Q+l+mW2DwvTGFzdD4KLQk8L05hbWU+Ci08L1BlcnNvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MDk1ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNWMxZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjExYTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPVVURi04IAotPHRlc3Q+Ci08L3Rlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlYWUwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTggc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwYzY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTg/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjYzZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjhlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgICA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFhMjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjU0OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNWZjNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+Ci0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NWRiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5ZDRkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA1YjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSAgICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YjhkMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCQotCSAgICAgIAkJICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZTM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOGNkZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWI1MzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmJlTWFsZm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5YmEzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZWZjZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjN2NjZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLQotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgoteG1sdWl0ZXN0cy5qYXIKLWphdmFDb21waWxlci54bWx1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZTY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ2ZDY4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDIucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB4bWx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNTAyNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB4bWx1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICBpY29ucy8KLWphcnMuY29tcGlsZS5vcmRlciA9IHhtbHVpdGVzdHMuamFyCi1zb3VyY2UueG1sdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQueG1sdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvYnJrcF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODMxZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvYnJrcF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGVlYjZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotQnVuZGxlLU5hbWUuMCA9IFhNTCBVSSBUZXN0cwotdmlldy5uYW1lLjAgPSBFbWJlZGRlZCBYTUwgU3RydWN0dXJlZCBUZXh0IFZpZXdlcgotCi1jb250ZW50VHlwZVRlc3RYTUw5OS5jdD1UZXN0IFhNTCBzdWItY29udGVudC10eXBlCi1jb250ZW50VHlwZVRlc3RYTUw5OS5lZGl0b3I9VGVzdCBYTUwgc3ViLWNvbnRlbnQtdHlwZSBlZGl0b3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlNTVjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4wIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdFhNTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0WE1MIj4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSB0ZXN0IGZvciBicmVha3BvaW50IGVycm9yIGhhbmRsaW5nIC0tPgotCQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmJyZWFrcG9pbnQiPgotCQk8YnJlYWtwb2ludENvbnRyaWJ1dGlvbgotCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcm92aWRlcnMudGVzdCI+Ci0JCTxwcm92aWRlcgotCQljb250ZW50VHlwZXM9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2Usb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuQnJlYWtwb2ludEVycm9yUHJvdmlkZXIiCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkJyZWFrcG9pbnRFcnJvclByb3ZpZGVyIj4KLQkJPC9wcm92aWRlcj4KLQkJPC9icmVha3BvaW50Q29udHJpYnV0aW9uPgotCQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5kZWRFZGl0b3JBY3Rpb25zIj4KLQkJPGVkaXRvckNvbnRyaWJ1dGlvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5hY3Rpb25zIj4KLQkJCTxhY3Rpb24KLQkJCQlwb3B1cG1lbnVQYXRoPSJncm91cC5lZGl0b3IiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuRW5hYmxlV2FybmluZ0FjdGlvbiIKLQkJCQltZW51YmFyUGF0aD0iZWRpdC9NZW51QWRkaXRpb25zIgotCQkJCWljb249Imljb25zL2Jya3Bfb2JqLmdpZiIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5FbmFibGVXYXJuaW5nQWN0aW9uIj4KLQkJCTwvYWN0aW9uPgotCQk8L2VkaXRvckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0gICAgICAgaWQ9InhtbC51aS50ZXN0czEiCi0gICAgICAgbmFtZT0iJUJ1bmRsZS1OYW1lLjAiCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotCQk8ZWRpdG9yCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrJFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLSAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFjdGlvbkNvbnRyaWJ1dG9yWE1MIgotICAgICAgICBkZWZhdWx0PSJmYWxzZSIKLSAgICAgICAgZmlsZW5hbWVzPSIqLnhtbDk5IgotICAgICAgICBpY29uPSJpY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yayRUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiCi0gICAgICAgIG5hbWU9IiVjb250ZW50VHlwZVRlc3RYTUw5OS5lZGl0b3IiCi0gICAgICAgIHN5bWJvbGljRm9udE5hbWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiPgotCQk8L2VkaXRvcj4KLQk8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZS5jb250ZW50VHlwZXMiPgotICAgICAgICA8Y29udGVudC10eXBlCi0JCQlmaWxlLWV4dGVuc2lvbnM9InhtbDk5IgotCQkJcHJpb3JpdHk9ImxvdyIKLQkJCW5hbWU9IiVjb250ZW50VHlwZVRlc3RYTUw5OS5jdCIKLQkJCWlkPSJ4bWw5OXNvdXJjZSIKLQkJCWJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI+Ci0JCTwvY29udGVudC10eXBlPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5jb21tZW50RWxlbWVudEhhbmRsZXIiPgotCQk8aGFuZGxlci1jdXN0b20KLQkJCWNvbW1lbnR0eXBlPSJ4bWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb21tZW50ZWxlbWVudC5Db21tZW50RWxlbWVudEhhbmRsZXJGb3JGb28iPgotCQkJPHN0YXJ0d2l0aCBwcmVmaXg9IiQiPjwvc3RhcnR3aXRoPgotCQk8L2hhbmRsZXItY3VzdG9tPgotCTwvZXh0ZW5zaW9uPgotIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJzb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyIiB0YXJnZXQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTENvZGVGb2xkaW5nVGVzdCIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2Jhc2ljWEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJjYmVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2Jhc2ljWEhUTUwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9jb252MlhIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNWM2YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9jb252MlhIVE1MLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pZGVudGlmeURURC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzg2NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pZGVudGlmeURURC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2ltcG9ydERURC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2ltcG9ydERURC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MTVkNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUxLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlkMjFiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUxLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMi5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNDUzZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMi5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3NldHVwRmlsZXMvV2lyZWxlc3MueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlNmEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3NldHVwRmlsZXMvV2lyZWxlc3MueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3N0cmljdFhIVE1MLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjZDBlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3N0cmljdFhIVE1MLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ZpbGVzL0pvYkRlc2NFUlJPUi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ZpbGVzL0pvYkRlc2NFUlJPUi54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2FmdGVyX3Bhc3RlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRiZjU0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2FmdGVyX3Bhc3RlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYmVmb3JlX3Bhc3RlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYmVmb3JlX3Bhc3RlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmMWViMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvaW52YWxpZF9kdGQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDBiYjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvaW52YWxpZF9kdGQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfbXVsdGlfZXJyb3IuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfbXVsdGlfZXJyb3IuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWEwMzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX3Vua25vd25fZWxlbWVudC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDNhY2M5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX3Vua25vd25fZWxlbWVudC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dfZG9jdHlwZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dfZG9jdHlwZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjg4NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93b3V0X2RvY3R5cGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93b3V0X2RvY3R5cGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjM3MjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd3JvbmdfZHRkLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd3JvbmdfZHRkLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNkMjQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3UwMTFhbmkuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA2M2FmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3UwMTFhbmkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3dpcmVsZXNzLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmY2NhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3dpcmVsZXNzLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZmFlZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuV29ya2JlbmNoQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUwgZGVsZWdhdGluZyBzb3VyY2UgdmFsaWRhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MIGV4dGVuZHMgVGVzdENhc2UgCi17Ci0JRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCBzb3VyY2VWYWxpZGF0b3IgPSBuZXcgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCgpOwotCQotCS8qKgotCSAqIFRlc3QgdGhhdCBmaWxlcyB0aGF0IGNvbnRhaW4gbm9uLThiaXQgY2hhcnMgYXJlIHZhbGlkYXRlZAotCSAqIGNvcnJlY3RseS4gaS5lLiBEbyBub3QgcHJvZHVjZSBpbmNvcnJlY3QgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uOEJpdENoYXJzKCkKLQl7Ci0JCVN0cmluZyBwcm9qTmFtZSA9ICJQcm9qZWN0IjsKLQkJU3RyaW5nIGZpbGVOYW1lMSA9ICJpbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCI7Ci0JCVN0cmluZyBmaWxlTmFtZTIgPSAiaW50ZXJuYXRpb25hbC54c2QiOwotCQkKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCQl0cnkgewotCQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQkKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMSkpOwotCQlpZiAoZmlsZSAhPSBudWxsICYmICFmaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWZpbGUuY3JlYXRlKEZpbGVMb2NhdG9yLm9wZW5TdHJlYW0oWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwiKSwgZmFsc2UpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMikpOwotCQlpZiAoZmlsZSAhPSBudWxsICYmICFmaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWZpbGUuY3JlYXRlKEZpbGVMb2NhdG9yLm9wZW5TdHJlYW0oWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC54c2QiKSwgZmFsc2UpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJV29ya2JlbmNoQ29udGV4dCBjb250ZXh0ID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJTGlzdCBmaWxlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZmlsZUxpc3QuYWRkKCIvIiArIHByb2pOYW1lICsgIi8iICsgZmlsZU5hbWUxKTsKLQkJY29udGV4dC5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QpOwotCQlUZXN0UmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCXRyeXsKLQkJCXNvdXJjZVZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCX0KLQkJY2F0Y2goVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCWFzc2VydEZhbHNlKCJNZXNzYWdlcyB3ZXJlIHJlcG9ydGVkIG9uIHZhbGlkIGZpbGUgMS4iLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCi0JCVdvcmtiZW5jaENvbnRleHQgY29udGV4dDIgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQlMaXN0IGZpbGVMaXN0MiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZmlsZUxpc3QyLmFkZCgiLyIgKyBwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMik7Ci0JCWNvbnRleHQyLnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdDIpOwotCQlUZXN0UmVwb3J0ZXIgcmVwb3J0ZXIyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQl0cnl7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dDIsIHJlcG9ydGVyMik7Ci0JCX0KLQkJY2F0Y2goVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCWFzc2VydEZhbHNlKCJNZXNzYWdlcyB3ZXJlIHJlcG9ydGVkIG9uIHZhbGlkIGZpbGUgMi4iLCByZXBvcnRlcjIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgQnVnIDI4NTI4NQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MI3Rlc3RSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZwotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmFsaWRhdGlvbi5UZXN0SFRNTFZhbGlkYXRvciN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmFsaWRhdGlvbi5KU1BIVE1MVmFsaWRhdG9yVGVzdCN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcoKSB0aHJvd3MgRXhjZXB0aW9uewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWciOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChwcm9qZWN0TmFtZSwgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpLmFwcGVuZChnZXROYW1lKCkpLCBudWxsKTsKLQkJCi0JCUlGaWxlIHRlc3RGaWxlID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJLy9nZXQgdGVzdCBmaWxlCi0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoInRlc3RyZXNvdXJjZXMvUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWciLCBwcm9qZWN0TmFtZSk7Ci0JCQl0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiVGVzdDEueG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIHRlc3RGaWxlICsgIiBkb2VzIG5vdCBleGlzdCIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQkJCQotCQkJLy9nZXQgdGhlIGRvY3VtZW50Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KHRlc3RGaWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQotCQkJLy9zZXQgdXAgZm9yIHZhbGlkYXRvcgotCQkJV29ya2JlbmNoQ29udGV4dCBjb250ZXh0ID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlmaWxlTGlzdC5hZGQodGVzdEZpbGUuZ2V0RnVsbFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOwotCQkJY29udGV4dC5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGNsZWFuIGZpbGUKLQkJCVRlc3RSZXBvcnRlciByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJCXNvdXJjZVZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQkKLQkJCS8vbmVlZCB0byBkeW5hbWljYWxseSBmaW5kIHdoZXJlIHRoZSAtLT4gaXMgYmVjYXVzZQotCQkJLy9pdHMgZGlmZmVyZW50IG9uIHVuaXggdnMgd2luZG93cyBiZWNhdXNlIG9mIGxpbmUgZW5kaW5ncwotCQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlpbnQgZW5kQ29tbWVudEluZGV4ID0gY29udGVudHMuaW5kZXhPZigiLS0+Iik7Ci0JCQkKLQkJCS8vcmVtb3ZlIC0tPgotCQkJZG9jdW1lbnQucmVwbGFjZShlbmRDb21tZW50SW5kZXgsIDMsICIiKTsKLQkJCQotCQkJLy92YWxpZGF0ZSBmaWxlIHdpdGggZXJyb3IKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSB2YWxpZGF0aW9uIGVycm9ycyBvbiAiICsgdGVzdEZpbGUsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQkKLQkJCS8vcmVwbGFjZSAtLT4KLQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kQ29tbWVudEluZGV4LCAwLCAiLS0+Iik7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQkJYXNzZXJ0RmFsc2UoIlRoZXJlIHNob3VsZCBiZSBubyB2YWxpZGF0aW9uIGVycm9ycyBvbiAiICsgdGVzdEZpbGUsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQl9IGNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiQ291bGQgbm90IHZhbGlkYXRlIHRlc3QgZmlsZSAiICsgdGVzdEZpbGUgKyAiOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9IGZpbmFsbHkgewotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIEJ1ZyAyNzYzMzcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVBZ2FpbnN0RFREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gIlRlc3RWYWxpZGF0ZUFnYWluc3REVEQiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChwcm9qZWN0TmFtZSwgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpLmFwcGVuZChnZXROYW1lKCkpLCBudWxsKTsKLQkJCi0JCUlGaWxlIHRlc3RGaWxlID0gbnVsbDsKLQkJdHJ5IHsKLQkJCS8vZ2V0IHRlc3QgZmlsZQotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCJ0ZXN0cmVzb3VyY2VzL1Rlc3RWYWxpZGF0ZUFnYWluc3REVEQiLCBwcm9qZWN0TmFtZSk7Ci0JCQl0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgic2ltcGxlLnhtbCIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICIgZG9lcyBub3QgZXhpc3QiLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0JCQkKLQkJCS8vc2V0IHVwIGZvciB2YWxpZGF0b3IKLQkJCVdvcmtiZW5jaENvbnRleHQgY29udGV4dCA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCQlMaXN0IGZpbGVMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZmlsZUxpc3QuYWRkKHRlc3RGaWxlLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpKTsKLQkJCWNvbnRleHQuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0KTsKLQkJCQotCQkJLy92YWxpZGF0ZSBmaWxlLCB0aGVyZSBzaG91bGQgYmUgb25lIGVycm9yCi0JCQlUZXN0UmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQkJYXNzZXJ0RmFsc2UoIlRoZXJlIHNob3VsZCBiZSBhbiBlcnJvciBtZXNzYWdlIHJlcG9ydGVkIGZvciBub3QgY29uZm9ybWluZyB0byB0aGUgRFREICIgKyB0ZXN0RmlsZSwgIXJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQl9IGNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiQ291bGQgbm90IHZhbGlkYXRlIHRlc3QgZmlsZSAiICsgdGVzdEZpbGUgKyAiOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBBIDxjb2RlPklSZXBvcnRlcjwvY29kZT4gZm9yIHRlc3RpbmcgdmFsaWRhdG9ycwotCSAqLwotCXByaXZhdGUgY2xhc3MgVGVzdFJlcG9ydGVyIGltcGxlbWVudHMgSVJlcG9ydGVyIHsKLQkJcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VSZXBvcnRlZCA9IGZhbHNlOwotCQkKLQkJcHVibGljIFRlc3RSZXBvcnRlcigpe30KLQkJCi0JCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJCW1lc3NhZ2VSZXBvcnRlZCA9IHRydWU7Ci0JCX0KLQkJCi0JCXB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVJlcG9ydGVkKCkgewotCQkJcmV0dXJuIG1lc3NhZ2VSZXBvcnRlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3BsYXlTdWJ0YXNrKElWYWxpZGF0b3IgdmFsaWRhdG9yLCBJTWVzc2FnZSBtZXNzYWdlKSB7fQotCi0JCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luLCBPYmplY3Qgb2JqZWN0KSB7fQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luKSB7fQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZU1lc3NhZ2VTdWJzZXQoSVZhbGlkYXRvciB2YWxpZGF0b3IsIE9iamVjdCBvYmosIFN0cmluZyBncm91cE5hbWUpIHt9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0TWFya3VwVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWRlMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUudmFsaWRhdG9yLkluY3JlbWVudGFsUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWFya3VwVmFsaWRhdG9yOwotCi0vKioKLSAqIFRlc3RzIE1hcmt1cFZhbGlkYXRvcgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1hcmt1cFZhbGlkYXRvciBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIE1hcmt1cFZhbGlkYXRvciBmVmFsaWRhdG9yOwotCXByaXZhdGUgSVJlcG9ydGVyIGZSZXBvcnRlcjsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZkRvY3VtZW50OwotCi0JLyoqCi0JICogVmFsaWRhdGVzIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIGNvbnRlbnRzCi0JICogICAgICAgICAgICBjb250ZW50cyB0byBzZXQgaW4gZG9jdW1lbnQKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgd2FzIGEgdmFsaWRhdGlvbiBlcnJvciBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVFcnJvcihTdHJpbmcgY29udGVudHMpIHsKLQkJZkRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCWZWYWxpZGF0b3IudmFsaWRhdGUobmV3IFJlZ2lvbigwLCBmRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpLCBudWxsLCBmUmVwb3J0ZXIpOwotCQlyZXR1cm4gZlJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGp1c3QgY3JlYXRlIG9uY2UKLQkJaWYgKGZWYWxpZGF0b3IgPT0gbnVsbCkKLQkJCWZWYWxpZGF0b3IgPSBuZXcgTWFya3VwVmFsaWRhdG9yKCk7Ci0JCWlmIChmUmVwb3J0ZXIgPT0gbnVsbCkKLQkJCWZSZXBvcnRlciA9IG5ldyBJbmNyZW1lbnRhbFJlcG9ydGVyKG51bGwpOwotCQlpZiAoZkRvY3VtZW50ID09IG51bGwpCi0JCQlmRG9jdW1lbnQgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigib25maXJlLnhtbCIsICIiLCBudWxsKTsKLQotCQlmVmFsaWRhdG9yLmNvbm5lY3QoZkRvY3VtZW50KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmVmFsaWRhdG9yLmRpc2Nvbm5lY3QoZkRvY3VtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc0luRW5kVGFnKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGF0dHJpYnV0ZXMgaW4gZW5kIHRhZyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3AgZHJvcD1cInJvbGxcIj4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgYXR0cmlidXRlcyBpbiBlbmQgdGFnIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvc2luZ0JyYWNrZXQoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgY2xvc2luZyBicmFja2V0IGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIDwvc3RvcD4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgY2xvc2luZyBicmFja2V0IGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlUYWcoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgZW1wdHkgdGFnIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjw+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGVtcHR5IHRhZyBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZVZhbHVlKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGF0dHJpYnV0ZSBoYXMgbm8gdmFsdWUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGF0dHJpYnV0ZSBtaXNzaW5nIHZhbHVlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9Pjwvc3RvcD4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgYXR0cmlidXRlIG1pc3NpbmcgdmFsdWUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbFwiPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlTmFtZSgpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCB0YWcgaGFzIHNwYWNlIGJlZm9yZSBuYW1lIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjwgICAgc3RvcD48L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IHRhZyBoYXMgc3BhY2UgYmVmb3JlIG5hbWUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RRdW90ZXNGb3JBdHRyaWJ1dGVWYWx1ZXMoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cIj48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cJz48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgcXVvdGVzIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9cm9sbD48L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cIlwiPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGxcIj48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCdcJz48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIHF1b3RlcyBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCdyb2xsXCc+PC9zdG9wPiIpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0Fic3RyYWN0WE1MVUlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0Fic3RyYWN0WE1MVUlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZWY0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9BYnN0cmFjdFhNTFVJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gY29waWVkIG92ZXIgZnJvbSBYU0wgVUkgVGVzdHMgZm9yIFhNTCBVSSBUZXN0cwotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIG1ha2UgdXNlIG9mIChjb3B5IG9mIEpTUCBVSSBUZXN0cycpIFByb2plY3RVdGlsIHRvIHNraXAKLSAqICAgICAgICAgZmlsZS1zeXN0ZW0gY2FsbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci0KLS8qIAotICogTWFkZSBhYnN0cmFjdCwgc28gd29uJ3QgYmUgYXV0b21hdGljYWxseSBwaWNrZWQgdXAgYXMgdGVzdCAoc2luY2UgaW50ZW5kZWQgdG8gYmUgc3ViY2xhc3NlZCkuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFhNTFVJVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICJ0ZXN0cmVzb3VyY2VzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAiQWJzdHJhY3RYTUxVSVRlc3RfdGVzdHJlc291cmNlcyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpCi0JCXsKLQkJCVByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFRFU1RfUFJPSkVDVF9OQU1FKTsKLQotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKQotCXsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3MWUzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQKLQkJCQkrIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY5YzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLm5ldC5VUkw7DQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCi0NCi0vKioNCi0gKiBTb21lIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgcHJvamVjdHMsIGFuZCBjb3B5aW5nIGZpbGVzIGludG8gdGhlIHdvcmtzcGFjZS4NCi0gKiBDb3BpZWQgZnJvbSBKU1AgVUkgdGVzdHMuDQotICovDQotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsNCi0NCi0Jc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7DQotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsNCi0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7DQotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsNCi0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsNCi0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7DQotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7DQotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCQl9DQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsNCi0JCQl9DQotCQkJZWxzZSB7DQotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7DQotCQkJfQ0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsNCi0JCX0NCi0JfQ0KLQ0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQlJRmlsZSBmaWxlID0gbnVsbDsNCi0JCVVSTCBlbnRyeSA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7DQotCQlpZiAoZW50cnkgIT0gbnVsbCkgew0KLQkJCXRyeSB7DQotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07DQotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOw0KLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOw0KLQkJCQlpbnQgaSA9IC0xOw0KLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7DQotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7DQotCQkJCX0NCi0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOw0KLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7DQotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsNCi0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCQkJCX0NCi0JCQkJCWVsc2Ugew0KLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJfQ0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gZmlsZTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQHBhcmFtIHJvb3RFbnRyeSAtIGF2b2lkIHRyYWlsaW5nIHNlcGFyYXRvcnMNCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoDQotCSAqLw0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgew0KLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsNCi0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7DQotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOw0KLQkJCX0NCi0JCX07DQotCQl0cnkgew0KLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJfQ0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgew0KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQl9DQotCX0NCi0NCi0JLyoqDQotCSAqIA0KLQkgKiBAcGFyYW0gZW50cnluYW1lDQotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBURVNUIHBsdWdpbiBzdGFydGluZyB3LyBhICIvIiAoZWcuDQotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQ0KLQkgKiBAcGFyYW0gZnVsbFBhdGgNCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIGp1bml0IHRlc3Qgd29ya3BhY2UgKGVnLg0KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikNCi0JICogQHJldHVybg0KLQkgKi8NCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgew0KLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOw0KLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsNCi0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsNCi0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7DQotCQkJfQ0KLQkJfTsNCi0JCXRyeSB7DQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JCXJldHVybiBmaWxlWzBdOw0KLQl9DQotDQotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgew0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7DQotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgew0KLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsNCi0JCX0NCi0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgew0KLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOw0KLQkJfQ0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsNCi0JCXRyeSB7DQotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCX0NCi0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJfQ0KLQkJcmV0dXJuIHByb2plY3Q7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc2ZjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YTUxEb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFnaW5mby5YTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5jb250ZW50b3V0bGluZS5YTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5wcm9wZXJ0aWVzLlhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIHhtbCBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RHZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuU09VUkNFVklFV0VSQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvY3VtZW50YXRpb25UZXh0SG92ZXIoKSB7Ci0JCU9iamVjdFtdIGhvdmVycyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9ucyhFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKS50b0FycmF5KCk7Ci0JCWFzc2VydFRydWUoIm5vIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBob3ZlcnMubGVuZ3RoID4gMCk7Ci0vLwkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLS8vCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIG8uZ2V0Q2xhc3MoKSwgWE1MVGFnSW5mb0hvdmVyUHJvY2Vzc29yLmNsYXNzKTsKLQkJQ2xhc3MgcmVxdWlyZWQgPSBYTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3M7Ci0JCWJvb2xlYW4gcmVxdWlyZWRGb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVycy5sZW5ndGg7IGkrKykgewotCQkJaWYocmVxdWlyZWQuZXF1YWxzKGhvdmVyc1tpXS5nZXRDbGFzcygpKSkKLQkJCQlyZXF1aXJlZEZvdW5kID0gdHJ1ZTsKLQkJfQotCQlhc3NlcnRUcnVlKHJlcXVpcmVkLmdldE5hbWUoKSArICIgbm90IGxvYWRlZCIsIHJlcXVpcmVkRm91bmQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPVUJMRUNMSUNLU1RSQVRFR1ksIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG91YmxlY2xpY2sgc3RyYXRlZ3kgZm9yICIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb3VibGVjbGljayBzdHJhdGVneSBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBvLmdldENsYXNzKCksIFhNTERvdWJsZUNsaWNrU3RyYXRlZ3kuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE5ld1hNTEdlbmVyYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0TmV3WE1MR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NzA0MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0TmV3WE1MR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTUNvbnRlbnRCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYTUxHZW5lcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3WE1MR2VuZXJhdG9yIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXN0YXRpYyBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0JCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfMSA9ICJTY2hlbWExIjsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BXzIgPSAiU2NoZW1hMiI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfRUxFTUVOVF8xID0gIkdvbGZDb3VudHJ5Q2x1YiI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfRUxFTUVOVF8yID0gIkJpbGxJbmZvIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHRlc3QuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsJCi0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIG5vIG9wdGlvbnMgc2VsZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19iYXJlKCkgewotCQlydW5PbmVUZXN0KDAsIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIG9wdGlvbmFsIGF0dHJpYnV0ZXMgaW5jbHVkZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19vcHRBdHRyKCkgewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0FUVFJJQlVURVMsIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIG9wdGlvbmFsIGVsZW1lbnRzIGluY2x1ZGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfb3B0RWxlbSgpIHsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9FTEVNRU5UUywgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggZWxlbWVudHMgc2V0IHRvIGluaXRpYWwgZmlyc3QgdmFsdWUuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19vcHRGaXJzdCgpIHsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9DSE9JQ0UgfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9TVUJTVElUVVRJT04sIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIHRleHQgbm9kZXMuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19vcHRUZXh0Tm9kZXMoKSB7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfVEVYVF9OT0RFUywgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggYWxsIG9wdGlvbnMgc2VsZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19hbGwoKSB7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfQVRUUklCVVRFUyB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0VMRU1FTlRTIHwgCi0JCQkJICBET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9DSE9JQ0UgfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9TVUJTVElUVVRJT04gfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9URVhUX05PREVTLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBhIHNlcGFyYXRlIHNjaGVtYSBpbiB3aGljaCBuYW1lc3BhY2VzIG11c3QgYmUgcXVhbGlmaWVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfbnNRdWFsaWZpZWQoKXsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9BVFRSSUJVVEVTIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfRUxFTUVOVFMgfCAKLQkJCQkgIERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX0NIT0lDRSB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX1NVQlNUSVRVVElPTiB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX1RFWFRfTk9ERVMsIFJPT1RfRUxFTUVOVF8yLCBTQ0hFTUFfMik7Ci0JfQotCQotCS8qKgotCSAqIFJ1bnMgYSBnZW5lcmljIGdlbmVyYXRlICsgY29tcGFyaXNvbiB0ZXN0LgotCSAqIEBwYXJhbSBidWlsZFBvbGljeSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYnVpbGQgcG9saWN5IGZvciB0aGlzIGdlbmVyYXRpb24uCi0JICogQHBhcmFtIHJvb3RFbGVtZW50IERlc2lyZWQgcm9vdCBlbGVtZW50LgotCSAqIEBwYXJhbSB4c2RVcmkgVVJJIG9mIHRoZSBkZXNpcmVkIFhNTCBzY2hlbWEuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJ1bk9uZVRlc3QoaW50IGJ1aWxkUG9saWN5LCBTdHJpbmcgcm9vdEVsZW1lbnQsIFN0cmluZyB4c2RVcmlGaWxlKSB7Ci0JICB0cnkgewotCQkgIC8vIGdlbmVyaWMgc2V0dXAKLQkJICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy8iICsgeHNkVXJpRmlsZSArICIueHNkIjsgLy8kTk9OLU5MUy0zJAotCQkgIFN0cmluZ1tdIGVycm9ySW5mbyA9IG5ldyBTdHJpbmdbMl07Ci0JCSAgQ01Eb2N1bWVudCBjbWQgPSBOZXdYTUxHZW5lcmF0b3IuY3JlYXRlQ01Eb2N1bWVudCh1cmksIGVycm9ySW5mbyk7Ci0JCSAgTmV3WE1MR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBOZXdYTUxHZW5lcmF0b3IodXJpLCBjbWQpOwotCQkJICAKLQkJICBTdHJpbmcgaWQgPSB4c2RVcmlGaWxlICsgIi0iICsgcm9vdEVsZW1lbnQgKyAiLSIgKyBidWlsZFBvbGljeTsKLQkJICAKLQkJICBTdHJpbmcgZmlsZU5hbWVSZXN1bHQgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL1Rlc3RlZC0iICsgaWQgKyAiLnhtbCI7IC8vJE5PTi1OTFMtMiQKLQkJICBGaWxlIG5GaWxlID0gbmV3IEZpbGUoZmlsZU5hbWVSZXN1bHQpOwotCQkgIGlmICghbkZpbGUuZXhpc3RzKCkpIHsKLQkJCSAgbkZpbGUuY3JlYXRlTmV3RmlsZSgpOwotCQkgIH0KLQkJICAKLQkJICBTdHJpbmcgZmlsZU5hbWVDb21wYXJlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9Db21wYXJlLSIgKyBpZCArICIueG1sIjsgLy8kTk9OLU5MUy0yJAotCQkgIAotCQkgIGdlbmVyYXRvci5zZXRCdWlsZFBvbGljeShidWlsZFBvbGljeSk7Ci0JCSAgZ2VuZXJhdG9yLnNldFJvb3RFbGVtZW50TmFtZShyb290RWxlbWVudCk7Ci0JCSAgZ2VuZXJhdG9yLnNldERlZmF1bHRTeXN0ZW1JZCh4c2RVcmlGaWxlICsgIi54c2QiKTsgLy8kTk9OLU5MUy0xJAotCQkgIGdlbmVyYXRvci5jcmVhdGVOYW1lc3BhY2VJbmZvTGlzdCgpOwotCQkgIGdlbmVyYXRvci5jcmVhdGVYTUxEb2N1bWVudChmaWxlTmFtZVJlc3VsdCk7Ci0JCSAgCi0JCSAgWE1MRGlmZiBkaWZmZXIgPSBuZXcgWE1MRGlmZigpOwotCQkgIGFzc2VydFRydWUoIlRoZSBYTUwgZmlsZXMgYXJlIG5vdCBpZGVudGljYWwuIiwgZGlmZmVyLmRpZmYoZmlsZU5hbWVDb21wYXJlLCBmaWxlTmFtZVJlc3VsdCwgIlhNTCIpKTsgLy8kTk9OLU5MUy0yJAotCQkgIAotCQkgIC8vIGlmIHdlJ3ZlIG1hZGUgaXQgdGhpcyBmYXIsIGRlbGV0ZSB0aGUgb3V0cHV0IGZpbGUKLQkJICByZW1vdmUobkZpbGUpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0gCSAgCQkKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGZpbGUKLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVtb3ZlKEZpbGUgZmlsZSkgewotCQlpZihmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLQkJCUZpbGVbXSBjaGlsZHJlbiA9IGZpbGUubGlzdEZpbGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJcmVtb3ZlKGNoaWxkcmVuW2ldKTsKLQkJCX0KLQkJfQotCQlmaWxlLmRlbGV0ZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3YTg5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBUZXN0IG1pc2MgZWRpdG9yIGZ1bmN0aW9ucyB3aXRoIGFuIG9wZW4geG1sIGVkaXRvci4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RPcGVuRWRpdG9yWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0T3BlbkVkaXRvclhNTCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvclhNTC54bWwiOwotCi0JcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgZkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBmRmlsZTsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdE9wZW5FZGl0b3JYTUwoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3JYTUwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBvbmx5IGNyZWF0ZSBwcm9qZWN0IGFuZCBmaWxlIG9uY2UKLQkJaWYgKCFmSXNTZXR1cCkgewotCQkJLy8gY3JlYXRlIHByb2plY3QKLQkJCWNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJCWZGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIEZJTEVfTkFNRSk7Ci0JCQlmSXNTZXR1cCA9IHRydWU7Ci0JCX0KLQotCQlhc3NlcnRUcnVlKCJJbnB1dCBmaWxlIG5vdCBhY2Nlc3NpYmxlOiAiICsgZkZpbGUuZ2V0RnVsbFBhdGgoKSwgZkZpbGUuaXNBY2Nlc3NpYmxlKCkpOwotCi0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJZkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IgIiArIGZFZGl0b3IsIChmRWRpdG9yIGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgfHwgKGZFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZFZGl0b3IgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlwYWdlLmNsb3NlRWRpdG9yKGZFZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQotCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCS8qKgotCSAqIFRlc3Qgc2V0dGluZyB0ZXh0IGluIGRvY3VtZW50IG9mIG9wZW4gZWRpdG9yLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudCgpIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudC5zZXQoIjxoZWxsbz48L2hlbGxvPiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNldCB0ZXh0IGluIGVkaXRvcjogIiArIGUsIGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3Qgc3RydWN0dXJlZCBkb2N1bWVudCBpcyByZWxvYWRlZCBvbiByZXNvdXJjZSBjaGFuZ2UKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTUxMDY5KCkgewotCQlJRG9jdW1lbnQgZG9jID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCWRvYy5zZXQoIjxodG1sPjxib2R5PjxoMT5UaXRsZTwvaDE+PC9ib2R5PjwvaHRtbD4iKTsKLQkJLy8gc2V0IGgxIHRvIHJlYWRvbmx5Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgbW9kZWxNYW5hZ2VyLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCU5vZGVMaXN0IG5sID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaDEiKTsKLQkJCQlJRE9NRWxlbWVudCBoMSA9IChJRE9NRWxlbWVudCkgbmwuaXRlbSgwKTsKLQkJCQloMS5zZXRFZGl0YWJsZShmYWxzZSwgdHJ1ZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JCVN0cmluZyBuZXdDb250ZW50ID0gIm5ldyBjb250ZW50IjsKLQkJKChJRG9jdW1lbnRFeHRlbnNpb240KSBkb2MpLnNldChuZXdDb250ZW50LCBmRmlsZS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgY29udGVudHMgaW4gZG9jdW1lbnQgd2l0aCByZWFkIG9ubHkgcmVnaW9ucyBmYWlsZWQiLCBuZXdDb250ZW50LCBkb2MuZ2V0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzcxNzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvcGVydGllcy5Db25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX05BTUUgPSAidGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLnhtbCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IGZNYWluRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCXN1cGVyKCJUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24iKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQotCQlpZiAoZklzU2V0dXAgJiYgZk1haW5FZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlmTWFpbkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWlmIChmTWFpbkVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCWZFZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpIGZNYWluRWRpdG9yOwotCQkJZWxzZSBpZiAoZk1haW5FZGl0b3IgIT0gbnVsbCkgewotCQkJCU9iamVjdCBhZGFwdGVyID0gZk1haW5FZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgYWRhcHRlcjsKLQkJCX0KLQkJCWlmIChmRWRpdG9yID09IG51bGwpCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciAiICsgKChmTWFpbkVkaXRvciAhPSBudWxsKSA/IGZNYWluRWRpdG9yLmdldENsYXNzKCkuZ2V0TmFtZSgpIDogIiIpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBlZGl0b3IgaXMgY2xvc2VkIGVhY2ggdGltZQotCQlpZiAoZk1haW5FZGl0b3IgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlwYWdlLmNsb3NlRWRpdG9yKGZNYWluRWRpdG9yLCBmYWxzZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gY2xvc2UgZWRpdG9yIiwgdHJ1ZSk7Ci0JCQlmTWFpbkVkaXRvciA9IG51bGw7Ci0JCQlmRWRpdG9yID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rRmlsZSAhPSBudWxsICYmICFibGFua0ZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0ZpbGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByb3BlcnR5U291cmNlUmVtb3ZhbCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQkvLyBzZXQgdXAgdGhlIGVkaXRvciBkb2N1bWVudAotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICI8dGVzdD48bXlwcm9wZXJ0eSBwcm9wcz1cInllc1wiIC8+PC90ZXN0PiIpOwotCi0JCS8vIHNldCBjdXJyZW50IHNlbGVjdGlvbiBpbiBlZGl0b3IKLQkJSVNlbGVjdGlvbiBzZXRTZWxlY3Rpb24gPSBuZXcgVGV4dFNlbGVjdGlvbig5LCAwKTsKLQkJZkVkaXRvci5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLnNldFNlbGVjdGlvbihzZXRTZWxlY3Rpb24pOwotCi0JCS8vIGdldCBjdXJyZW50IHNlbGVjdGlvbiBpbiBlZGl0b3IKLQkJT2JqZWN0IGl0ZW0gPSBudWxsOwotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlpdGVtID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQotCQkJSVByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXQgPSAoSVByb3BlcnR5U2hlZXRQYWdlKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKTsKLQkJCWFzc2VydFRydWUoIk5vIENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlIGZvdW5kIiwgcHJvcGVydHlTaGVldCBpbnN0YW5jZW9mIENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlKTsKLQkJCWlmIChwcm9wZXJ0eVNoZWV0IGluc3RhbmNlb2YgQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UpIHsKLQkJCQlDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSBjcHMgPSAoQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UpIHByb3BlcnR5U2hlZXQ7Ci0JCQkJUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24gY29uZmlnID0gY3BzLmdldENvbmZpZ3VyYXRpb24oKTsKLQkJCQlhc3NlcnROb3ROdWxsKCJObyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvdW5kIiwgY29uZmlnKTsKLQotCQkJCUlQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyIHByb3ZpZGVyID0gY29uZmlnLmdldFByb3BlcnR5U291cmNlUHJvdmlkZXIoY3BzKTsKLQkJCQlhc3NlcnROb3ROdWxsKCJObyBwcm9wZXJ0eSBzaGVldCBwcm92aWRlciBmb3VuZCIsIHByb3ZpZGVyKTsKLQotCQkJCUlQcm9wZXJ0eVNvdXJjZSBzb3VyY2UgPSBwcm92aWRlci5nZXRQcm9wZXJ0eVNvdXJjZShpdGVtKTsKLQkJCQlpZiAoc291cmNlIGluc3RhbmNlb2YgSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uKSB7Ci0JCQkJCWJvb2xlYW4gY2FuUmVtb3ZlID0gKChJUHJvcGVydHlTb3VyY2VFeHRlbnNpb24pIHNvdXJjZSkuaXNQcm9wZXJ0eVJlbW92YWJsZSgicHJvcHMiKTsKLQkJCQkJYXNzZXJ0VHJ1ZSgiQ3VycmVudCBwcm9wZXJ0eSBjYW5ub3QgYmUgcmVtb3ZlZCIsIGNhblJlbW92ZSk7Ci0JCQkJCWlmIChjYW5SZW1vdmUpIHsKLQkJCQkJCSgoSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uKSBzb3VyY2UpLnJlbW92ZVByb3BlcnR5KCJwcm9wcyIpOwotCQkJCQkJYXNzZXJ0VHJ1ZSgiQ3VycmVudCBwcm9wZXJ0eSBjYW5ub3QgYmUgcmVtb3ZlZCIsIHRydWUpOwotCQkJCQkJLy8gZm9yY2UgcmV0dXJuIGhlcmUsIHRvIGF2b2lkIGxhc3QgZmFsbCB0aHJvdWdoCi0JCQkJCQkvLyBmYWlsaW5nIGFzc2VydAotCQkJCQkJcmV0dXJuOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8vIGlmIHdlIGdldCB0byBoZXJlLCBhbHdheXMgZmFpbCwgc2luY2Ugc29tZXRoaW5nIHdlbnQgd3JvbmcuCi0JCWFzc2VydFRydWUoInRlc3RQcm9wZXJ0eVNvdXJjZVJlbW92YWwgdGVzdCBkaWQgbm90IHRha2UgZXhwZWN0ZWQgcGF0aCIsIGZhbHNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RSZWNvbmNpbGVyWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RSZWNvbmNpbGVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmMzYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UmVjb25jaWxlclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5wcmVmZXJlbmNlcy5Db21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydDsKLQotLyoqCi0gKiBUZXN0cyByZWNvbmNpbGVyIGluIGFuIG9wZW4gZWRpdG9yLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFJlY29uY2lsZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RSZWNvbmNpbGVyWE1MIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX05BTUUgPSAiVGVzdFJlY29uY2lsZXJYTUxmaWxlLnhtbCI7Ci0JZmluYWwgcHJpdmF0ZSBTdHJpbmcgQU5OT1RBVElPTl9FUlJPUiA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlbXAuZXJyb3IiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgcHJpdmF0ZSBTdHJpbmcgQU5OT1RBVElPTl9XQVJOSU5HID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVtcC53YXJuaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgZkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBmRmlsZTsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZlJlY29uY2lsZXJQcmVmOwotCi0JcHVibGljIFRlc3RSZWNvbmNpbGVyWE1MKCkgewotCQlzdXBlcigiVGVzdFJlY29uY2lsZXJYTUwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBvbmx5IGNyZWF0ZSBwcm9qZWN0IGFuZCBmaWxlIG9uY2UKLQkJaWYgKCFmSXNTZXR1cCkgewotCQkJLy8gY3JlYXRlIHByb2plY3QKLQkJCWNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJCWZGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIEZJTEVfTkFNRSk7Ci0JCQlmSXNTZXR1cCA9IHRydWU7Ci0JCX0KLQotCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQotCQlpZiAoZklzU2V0dXAgJiYgZkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCWZFZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmRmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQlpZiAoISgoZkVkaXRvciBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHx8IChmRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpKSkKLQkJCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIiwgZmFsc2UpOwotCQl9Ci0KLQkJLy8gdHVybiBvbiByZWNvbmNpbGluZwotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlmUmVjb25jaWxlclByZWYgPSBzdG9yZS5nZXRCb29sZWFuKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCQlpZiAoIWZSZWNvbmNpbGVyUHJlZikKLQkJCXN0b3JlLnNldFZhbHVlKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIHRydWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3RvcmUgcmVjb25jaWxpbmcgcHJlZmVyZW5jZQotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCBmUmVjb25jaWxlclByZWYpOwotCi0JCS8vIGVkaXRvciBpcyBjbG9zZWQgZWFjaCB0aW1lCi0JCWlmIChmRWRpdG9yICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJcGFnZS5jbG9zZUVkaXRvcihmRWRpdG9yLCBmYWxzZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gY2xvc2UgZWRpdG9yIiwgdHJ1ZSk7Ci0JCQlmRWRpdG9yID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rRmlsZSAhPSBudWxsICYmICFibGFua0ZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0ZpbGU7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgcmVjb25jaWxlciBieSB2ZXJpZnlpbmcgbm8gZXJyb3JzL3dhcm5pbmdzIGZvdW5kIHdpdGggd2VsbC1mb3JtZWQKLQkgKiB4bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFdlbGxGb3JtZWQoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJQW5ub3RhdGlvbk1vZGVsIGFubm9Nb2RlbCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcyBhbm5vdGF0aW9uQWNjZXNzID0gbmV3IERlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzKCk7Ci0KLQkJLy8gdmVyaWZ5IHdlbGwtZm9ybWVkIHhtbAotCQl0cnkgewotCQkJVGhyZWFkLnNsZWVwKDUwMDApOwotCQkJSXRlcmF0b3IgaXRlciA9IGFubm9Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCS8vIG1ha2Ugc3VyZSB0aGUgb25seSBwcm9ibGVtIHdlIGZpbmQgaXMgdGhlIGxhY2sgb2YgYSBzcGVjaWZpZWQgZ3JhbW1hcgotCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJQW5ub3RhdGlvbiBhbm5vID0gKEFubm90YXRpb24pIGl0ZXIubmV4dCgpOwotCQkJCVN0cmluZyBhbm5vVHlwZSA9IGFubm8uZ2V0VHlwZSgpOwotCQkJCWlmICgoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fRVJST1IpKSB8fCAoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fV0FSTklORykpKSB7Ci0JCQkJCWFzc2VydFRydWUoInRlc3RSZWNvbmNpbGVyOiBVbmV4cGVjdGVkIGluaXRpYWwgYW5ub3RhdGlvbnMiICsgYW5uby5nZXRUZXh0KCksIGFubm8uZ2V0VGV4dCgpLmluZGV4T2YoIk5vIGdyYW1tYXIgY29uc3RyYWludHMiKSA+IC0xKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyByZWNvbmNpbGVyIGJ5IHZlcmlmeWluZyBlcnJvci93YXJuaW5nIGZvdW5kIHdpdGggaWxsLWZvcm1lZCB4bWwuCi0JICogKG1pc3NpbmcgY2xvc2UgYnJhY2tldCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkTm9DbG9zZUJyYWNrZXQoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJQW5ub3RhdGlvbk1vZGVsIGFubm9Nb2RlbCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcyBhbm5vdGF0aW9uQWNjZXNzID0gbmV3IERlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzKCk7Ci0KLQkJLy8gdmVyaWZ5IGlsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlkb2MucmVwbGFjZSg2LCA2LCAiPGJvZHkgIik7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBhbm5vTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlBbm5vdGF0aW9uIGFubm8gPSAoQW5ub3RhdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGFubm9UeXBlID0gYW5uby5nZXRUeXBlKCk7Ci0JCQkJaWYgKChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9FUlJPUikpIHx8IChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9XQVJOSU5HKSkpIHsKLQkJCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgidGVzdFJlY29uY2lsZXI6IERpZCBub3QgZmluZCBleHBlY3RlZCBlcnJvcnMgaW46ICIgKyBkb2MuZ2V0KCksIGVycm9yRm91bmQpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgcmVjb25jaWxlciBieSB2ZXJpZnlpbmcgZXJyb3Ivd2FybmluZyBmb3VuZCB3aXRoIGlsbC1mb3JtZWQgeG1sLgotCSAqIChtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkTm9BdHRyVmFsdWUoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJQW5ub3RhdGlvbk1vZGVsIGFubm9Nb2RlbCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcyBhbm5vdGF0aW9uQWNjZXNzID0gbmV3IERlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzKCk7Ci0KLQkJLy8gdmVyaWZ5IGlsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlkb2MucmVwbGFjZSg2LCA2LCAiPGJvZHkgaGVsbG8+Iik7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBhbm5vTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlBbm5vdGF0aW9uIGFubm8gPSAoQW5ub3RhdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGFubm9UeXBlID0gYW5uby5nZXRUeXBlKCk7Ci0JCQkJaWYgKChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9FUlJPUikpIHx8IChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9XQVJOSU5HKSkpIHsKLQkJCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgidGVzdFJlY29uY2lsZXI6IERpZCBub3QgZmluZCBleHBlY3RlZCBlcnJvcnMgaW46ICIgKyBkb2MuZ2V0KCksIGVycm9yRm91bmQpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTc4ZTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS5Eb2N1bWVudFJlZ2lvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuVmFsaWRhdG9yTWV0YURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUudmFsaWRhdG9yLlZhbGlkYXRvclN0cmF0ZWd5OwotCi0vKioKLSAqIFRlc3RzIHJlY29uY2lsZXIgaW4gYW4gb3BlbiBlZGl0b3IuIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGF3a3dhcmQKLSAqIGluIHRoYXQgaXQgcmVmZXJzIHRvIGNvbnRlbnQgdHlwZXMgZGVjbGFyZWQgaW4gcGx1Z2lucyB0aGF0IGFyZW4ndCByZXF1aXJlZAotICogdG8gYmUgcHJlc2VudC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRISVMgU1VCQ0xBU1MgSVMgRk9SIFRFU1RJTkcgT05MWQotCSAqLwotCXB1YmxpYyBzdGF0aWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIGV4dGVuZHMgU3RydWN0dXJlZFRleHRFZGl0b3IgewotCQlwdWJsaWMgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiB0ZXh0Vmlld2VyQ29uZmlndXJhdGlvbiA9IG51bGw7Ci0KLQkJcHJvdGVjdGVkIHZvaWQgc2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbihTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQkJc3VwZXIuc2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbihjb25maWcpOwotCQkJdGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gPSBjb25maWc7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVBBUkFUT1IgPSBTdHJpbmcudmFsdWVPZihJUGF0aC5TRVBBUkFUT1IpOwotCi0JcHJpdmF0ZSBib29sZWFuIGZQcmV2aW91c1JlY29uY2lsZXJQcmVmOwotCi0JcHVibGljIFRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrKCkgewotCQlzdXBlcigiVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsiKTsKLQl9Ci0KLQlwcml2YXRlIElGaWxlIGVuc3VyZUZpbGVJc0FjY2Vzc2libGUoU3RyaW5nIGZpbGVQYXRoLCBieXRlW10gY29udGVudHMpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBieXRlcyA9IGNvbnRlbnRzOwotCQkJCWlmIChieXRlcyA9PSBudWxsKSB7Ci0JCQkJCWJ5dGVzID0gbmV3IGJ5dGVbMF07Ci0JCQkJfQotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCXByaXZhdGUgSUNvbnRlbnRUeXBlW10gZGV0ZWN0Q29udGVudFR5cGVzKFN0cmluZyBmaWxlTmFtZSkgewotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IG51bGw7Ci0JCUlGaWxlIGZpbGUgPSBlbnN1cmVGaWxlSXNBY2Nlc3NpYmxlKFBST0pFQ1RfTkFNRSArIFNFUEFSQVRPUiArIGZpbGVOYW1lLCBudWxsKTsKLQotCQl0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoZmlsZS5nZXROYW1lKCkpOwotCQlpZiAodHlwZXMubGVuZ3RoID09IDApIHsKLQkJCUlDb250ZW50RGVzY3JpcHRpb24gZCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCS8vIG9wdGltaXplZCBkZXNjcmlwdGlvbiBsb29rdXAsIG1pZ2h0IG5vdCBzdWNjZWVkCi0JCQkJZCA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCQkJaWYgKGQgIT0gbnVsbCkgewotCQkJCQl0eXBlcyA9IG5ldyBJQ29udGVudFR5cGVbXXtkLmdldENvbnRlbnRUeXBlKCl9OwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvKgotCQkJCSAqIHNob3VsZCBub3QgYmUgcG9zc2libGUgZ2l2ZW4gdGhlIGFjY2Vzc2libGUgYW5kIGZpbGUgdHlwZQotCQkJCSAqIGNoZWNrIGFib3ZlCi0JCQkJICovCi0JCQl9Ci0JCX0KLQkJaWYgKHR5cGVzID09IG51bGwpIHsKLQkJCXR5cGVzID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlc0ZvcihmaWxlLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZGV0ZWN0Q29udGVudFR5cGVJRHMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCUlDb250ZW50VHlwZVtdIHR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVzKGZpbGVOYW1lKTsKLQkJU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1t0eXBlcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZHNbaV0gPSB0eXBlc1tpXS5nZXRJZCgpOwotCQl9Ci0JCXJldHVybiBpZHM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlkZW50aWNhbENvbnRlbnRzKE9iamVjdCBvMVtdLCBPYmplY3QgbzJbXSkgewotCQlpZiAobzEubGVuZ3RoID09IDAgJiYgbzIubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlPYmplY3RbXSBhcnJheTEgPSBuZXcgT2JqZWN0W28xLmxlbmd0aF07Ci0JCU9iamVjdFtdIGFycmF5MiA9IG5ldyBPYmplY3RbbzIubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShvMSwgMCwgYXJyYXkxLCAwLCBvMS5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KG8yLCAwLCBhcnJheTIsIDAsIG8yLmxlbmd0aCk7Ci0JCUFycmF5cy5zb3J0KGFycmF5MSk7Ci0JCUFycmF5cy5zb3J0KGFycmF5Mik7Ci0JCXJldHVybiBBcnJheXMuZXF1YWxzKGFycmF5MSwgYXJyYXkyKTsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCBlbnN1cmVQcm9qZWN0SXNBY2Nlc3NpYmxlKFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0JCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKQotCQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGdldFNvdXJjZVZhbGlkYXRvcklEcyhTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlMaXN0IHZhbGlkYXRvcklkcyA9IG5ldyBBcnJheUxpc3QoMSk7Ci0JCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0KLQkJSUZpbGUgZmlsZSA9IGVuc3VyZUZpbGVJc0FjY2Vzc2libGUoUFJPSkVDVF9OQU1FICsgU0VQQVJBVE9SICsgZmlsZU5hbWUsIG51bGwpOwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MuZ2V0TmFtZSgpLCB0cnVlKTsKLQotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCVRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciB0ZXN0VGV4dEVkaXRvciA9IChUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IpIHRleHRFZGl0b3I7Ci0JCUlSZWNvbmNpbGVyIHJlY29uY2lsZXIgPSB0ZXN0VGV4dEVkaXRvci50ZXh0Vmlld2VyQ29uZmlndXJhdGlvbi5nZXRSZWNvbmNpbGVyKHRlc3RUZXh0RWRpdG9yLmdldFRleHRWaWV3ZXIoKSk7Ci0KLQkJYXNzZXJ0Tm90TnVsbChyZWNvbmNpbGVyKTsKLQkJYXNzZXJ0VHJ1ZSgidW5leHBlY3RlZCBJUmVjb25jaWxlciBpbXBsZW1lbnRhdGlvbjogIiArIHJlY29uY2lsZXIuZ2V0Q2xhc3MoKSwgcmVjb25jaWxlciBpbnN0YW5jZW9mIERvY3VtZW50UmVnaW9uUHJvY2Vzc29yKTsKLQotCQlDbGFzcyByZWNvbmNpbGVyQ2xhc3MgPSByZWNvbmNpbGVyLmdldENsYXNzKCk7Ci0JCU1ldGhvZCBtZXRob2QgPSBudWxsOwotCQl3aGlsZSAocmVjb25jaWxlckNsYXNzICE9IE9iamVjdC5jbGFzcyAmJiBtZXRob2QgPT0gbnVsbCkgewotCQkJTWV0aG9kW10gbWV0aG9kcyA9IHJlY29uY2lsZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChtZXRob2RzW2ldLmdldE5hbWUoKS5lcXVhbHMoImdldFZhbGlkYXRvclN0cmF0ZWd5IikpIHsKLQkJCQkJbWV0aG9kID0gbWV0aG9kc1tpXTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZWNvbmNpbGVyQ2xhc3MgPSByZWNvbmNpbGVyQ2xhc3MuZ2V0U3VwZXJjbGFzcygpOwotCQl9Ci0KLQkJYXNzZXJ0Tm90TnVsbCgibm8gZ2V0VmFsaWRhdG9yU3RyYXRlZ3kgbWV0aG9kIGZvdW5kIG9uICIgKyByZWNvbmNpbGVyLmdldENsYXNzKCksIG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlWYWxpZGF0b3JTdHJhdGVneSBzdHJhdGVneSA9IChWYWxpZGF0b3JTdHJhdGVneSkgbWV0aG9kLmludm9rZShyZWNvbmNpbGVyLCBuZXcgT2JqZWN0WzBdKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVneSk7Ci0JCUZpZWxkIGZNZXRhRGF0YSA9IHN0cmF0ZWd5LmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZCgiZk1ldGFEYXRhIik7Ci0JCWFzc2VydE5vdE51bGwoInZhbGlkYXRvciBtZXRhZGF0YSBmaWVsZCBcImZNZXRhRGF0YVwiIG5vdCBmb3VuZCBvbiBzdHJhdGVneSAiICsgc3RyYXRlZ3kuZ2V0Q2xhc3MoKSwgZk1ldGFEYXRhKTsKLQkJZk1ldGFEYXRhLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCUxpc3QgbWV0YWRhdGEgPSAoTGlzdCkgZk1ldGFEYXRhLmdldChzdHJhdGVneSk7Ci0JCWFzc2VydE5vdE51bGwobWV0YWRhdGEpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1ldGFkYXRhLnNpemUoKTsgaSsrKSB7Ci0JCQl2YWxpZGF0b3JJZHMuYWRkKCgoVmFsaWRhdG9yTWV0YURhdGEpIG1ldGFkYXRhLmdldChpKSkuZ2V0VmFsaWRhdG9ySWQoKSk7Ci0JCX0KLQotCQlwYWdlLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotCi0JCXJldHVybiB2YWxpZGF0b3JJZHM7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZW5zdXJlUHJvamVjdElzQWNjZXNzaWJsZShQUk9KRUNUX05BTUUpOwotCi0JCS8vIHR1cm4gb24gcmVjb25jaWxpbmcKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJZlByZXZpb3VzUmVjb25jaWxlclByZWYgPSBzdG9yZS5nZXRCb29sZWFuKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCQlpZiAoIWZQcmV2aW91c1JlY29uY2lsZXJQcmVmKSB7Ci0JCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCB0cnVlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3RvcmUgcmVjb25jaWxpbmcgcHJlZmVyZW5jZQotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCBmUHJldmlvdXNSZWNvbmNpbGVyUHJlZik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZVZhbGlkYXRpb25FbmFibGVtZW50V2l0aEluaGVyaXRlZFZhbGlkYXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJT2JqZWN0W10geG1sVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sIikudG9BcnJheSgpOwotCQlhc3NlcnRUcnVlKCJObyBYTUwgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCB4bWxWYWxpZGF0b3JJRHMubGVuZ3RoID4gMCk7Ci0JCU9iamVjdFtdIHhtbDk5VmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sOTkiKS50b0FycmF5KCk7Ci0JCWFzc2VydFRydWUoIk5vIFhNTDk5IHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgeG1sOTlWYWxpZGF0b3JJRHMubGVuZ3RoID4gMCk7Ci0KLQkJQXJyYXlzLnNvcnQoeG1sVmFsaWRhdG9ySURzKTsKLQkJQXJyYXlzLnNvcnQoeG1sOTlWYWxpZGF0b3JJRHMpOwotCi0JCWFzc2VydEVxdWFscygidmFsaWRhdG9yIGxpc3RzIHNob3VsZCBiZSB0aGUgc2FtZSBsZW5ndGgiLCB4bWxWYWxpZGF0b3JJRHMubGVuZ3RoLCB4bWw5OVZhbGlkYXRvcklEcy5sZW5ndGgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHhtbFZhbGlkYXRvcklEcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJ2YWxpZGF0b3IgSURzIHNob3VsZCBiZSB0aGUgc2FtZSBbIiArIGkgKyAiXSIsIHhtbFZhbGlkYXRvcklEc1tpXSwgeG1sOTlWYWxpZGF0b3JJRHNbaV0pOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZVZhbGlkYXRpb25FbmFibGVtZW50V2l0aFVuaXF1ZVZhbGlkYXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nW10geG1sQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWwiKTsKLQkJU3RyaW5nW10geHNkQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54c2QiKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSBkaXN0aW5jdCBYU0QKLQkJICogY29udGVudCB0eXBlLCBza2lwIHRoZSByZXN0Ci0JCSAqLwotCQlpZiAoIWlkZW50aWNhbENvbnRlbnRzKHhtbENvbnRlbnRUeXBlcywgeHNkQ29udGVudFR5cGVzKSkgewotCQkJTGlzdCB4bWxWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWwiKTsKLQkJCWFzc2VydFRydWUoIk5vIFhNTCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICF4bWxWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCUxpc3QgeHNkVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueHNkIik7Ci0JCQlhc3NlcnRUcnVlKCJObyBYU0Qgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCAheHNkVmFsaWRhdG9ySURzLmlzRW1wdHkoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHhtbFZhbGlkYXRvcklEcy5zaXplKCk7IGkrKykgewotCQkJCWFzc2VydFRydWUoIlhNTCBWYWxpZGF0b3IgZm91bmQgb24gWFNEIGlucHV0IiwgIXhzZFZhbGlkYXRvcklEcy5jb250YWlucyh4bWxWYWxpZGF0b3JJRHMuZ2V0KGkpKSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJObyBkaXN0aW5jdCBYU0QgY29udGVudCB0eXBlIGZvdW5kIHdoaWxlIHJ1bm5pbmcgIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuV0FSTklORywgbWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlVmFsaWRhdGlvbkVuYWJsZW1lbnRXaXRoVW5yZWxhdGVkQ29udGVudFR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZ1tdIGR0ZENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuZHRkIik7Ci0JCVN0cmluZ1tdIGpzcENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuanNwIik7Ci0JCWlmIChkdGRDb250ZW50VHlwZXMubGVuZ3RoID09IDApIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIk5vIERURCBjb250ZW50IHR5cGUgZm91bmQgd2hpbGUgcnVubmluZyAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HLCBtZXNzYWdlKTsKLQkJfQotCQlpZiAoanNwQ29udGVudFR5cGVzLmxlbmd0aCA9PSAwKSB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJObyBKU1AgY29udGVudCB0eXBlIGZvdW5kIHdoaWxlIHJ1bm5pbmcgIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuV0FSTklORywgbWVzc2FnZSk7Ci0JCX0KLQotCi0JCWlmIChkdGRDb250ZW50VHlwZXMubGVuZ3RoID4gMCAmJiBqc3BDb250ZW50VHlwZXMubGVuZ3RoID4gMCAmJiAhaWRlbnRpY2FsQ29udGVudHMoZHRkQ29udGVudFR5cGVzLCBqc3BDb250ZW50VHlwZXMpKSB7Ci0JCQlMaXN0IGR0ZFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLmR0ZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gRFREIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgIWR0ZFZhbGlkYXRvcklEcy5pc0VtcHR5KCkpOwotCQkJTGlzdCBqc3BWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy5qc3AiKTsKLQkJCWFzc2VydFRydWUoIk5vIEpTUCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICFqc3BWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCWludCBkdGRWYWxpZGF0b3JDb3VudCA9IGR0ZFZhbGlkYXRvcklEcy5zaXplKCk7Ci0JCQlkdGRWYWxpZGF0b3JJRHMucmVtb3ZlQWxsKGpzcFZhbGlkYXRvcklEcyk7Ci0JCQlhc3NlcnRFcXVhbHMoInZhbGlkYXRvcnMgZm91bmQgcnVubmluZyBvbiBib3RoIENTUyBhbmQgRFREIiwgZHRkVmFsaWRhdG9yQ291bnQsIGR0ZFZhbGlkYXRvcklEcy5zaXplKCkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1YzgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnNwZWxsaW5nLklTcGVsbGNoZWNrRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5zcGVsbGluZy5TcGVsbGNoZWNrRGVsZWdhdGVBZGFwdGVyRmFjdG9yeTsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIDxjb2RlPlNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeTwvY29kZT4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5KCkgewotCQlzdXBlcigiVGVzdCBTcGVsbGNoZWNrIERlbGVnYXRlIEFkYXBhdGVyRmFjdG9yeSIpOwotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvcgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIGdpdmUgdG8gdGhpcyB0ZXN0IHJ1bgotCSAqLwotCXB1YmxpYyBUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSA8Y29kZT5TcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3Rvcnk8L2NvZGU+Ci0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiAgewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeSI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgidGVzdHJlc291cmNlcy9zcGVsbGNoZWNrIiwgcHJvamVjdE5hbWUpOwotCQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInNwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbCIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICIgZG9lcyBub3QgZXhpc3QiLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0JCQotCQkJLy9nZXQgZGVsZWdhdGUKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKHRlc3RGaWxlKTsKLQkJCVNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgU3BlbGxjaGVja0RlbGVnYXRlQWRhcHRlckZhY3RvcnkoKTsKLQkJCUlTcGVsbGNoZWNrRGVsZWdhdGUgZGVsZWdhdGUgPSAoSVNwZWxsY2hlY2tEZWxlZ2F0ZSlmYWN0b3J5LmdldEFkYXB0ZXIoc3RydWN0dXJlZE1vZGVsLCBJU3BlbGxjaGVja0RlbGVnYXRlLmNsYXNzKTsKLQkJCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBnZXQgc3BlbGxjaGVjayBkZWxlZ2F0ZSIsIGRlbGVnYXRlKTsKLQkJCQotCQkJLy9ydW4gdGVzdHMKLQkJCWJvb2xlYW4gc2hvdWxkU3BlbGxjaGVja0NvbW1lbnRFbGVtZW50ID0gZGVsZWdhdGUuc2hvdWxkU3BlbGxjaGVjayg1NCwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCWFzc2VydEZhbHNlKCJTaG91bGQgbm90IGJlIHNwZWxsY2hlY2tpbmcgY29tbWVudCBlbGVtZW50cyIsIHNob3VsZFNwZWxsY2hlY2tDb21tZW50RWxlbWVudCk7Ci0JCQkKLQkJCWJvb2xlYW4gc2hvdWxkU3BlbGxjaGVja0NvbW1lbnQgPSBkZWxlZ2F0ZS5zaG91bGRTcGVsbGNoZWNrKDgwLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGJlIHNwZWxsY2hlY2tpbmcgY29tbWVudCByZWdpb25zIiwgc2hvdWxkU3BlbGxjaGVja0NvbW1lbnQpOwotCQl9IGZpbmFsbHkgewotCQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNWU0MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IFhNTFVJUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoInhtbCBlZGl0b3IgcGx1Z2luIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBwbHVnaW4pOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxDb2RlRm9sZGluZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MQ29kZUZvbGRpbmdUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ODUxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxDb2RlRm9sZGluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Bbm5vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi0vKioKLSAqIDxwPlRlc3RzIHRoYXQgY29kZSBmb2xkaW5nIGFubm90YXRpb25zIGFyZSBjb3JyZWN0bHkgYWRkZWQvcmVtb3ZlZCBmcm9tIFhNTCBEb2N1bWVudHM8L3A+Ci0gKiA8cD5BbGwgb2YgdGhlc2UgdGVzdHMgdXNlIHRoZSBzYW1lIHByb2plY3QgYW5kIHdoZW4gcG9zc2libGUgdGhlIHNhbWUgb3BlbiBkb2N1bWVudHM8L3A+Ci0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gWE1MIENvZGUgRm9sZGluZyBUZXN0Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyLkNTU0NvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBDU1MgQ29kZSBGb2xkaW5nIFRlc3QKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIuRFREQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIERURCBDb2RlIEZvbGRpbmcgVGVzdAotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29kZUZvbGRpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciB7Ci0JLyoqIG1heCBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfV0FJVF9USU1FID0gMTUwMDA7Ci0JCi0JLyoqIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRSA9IDIwMDsKLQkKLQkvKioKLQkgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiWE1MQ29kZUZvbGRpbmdUZXN0IjsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9mb2xkaW5nIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqIHRoZSBsYXN0IHtAbGluayBJRG9jdW1lbnR9IHRvIGJlIHJlY29uY2lsZWQgKi8KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnQgZlJlY29uY2lsZWREb2MgPSBudWxsOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFhNTENvZGVGb2xkaW5nVGVzdCgpIHsKLQkJc3VwZXIoIlhNTCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgWE1MQ29kZUZvbGRpbmdUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKFhNTENvZGVGb2xkaW5nVGVzdC5jbGFzcywgIlhNTCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCQlyZXR1cm4gbmV3IFhNTENvZGVGb2xkaW5nVGVzdFNldHVwKHRzKTsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXNldCB0aGUgc3RhdGUgYmV0d2VlbiB0ZXN0cwotCSAqIAotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQkJZlJlY29uY2lsZWREb2MgPSBudWxsOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhlIGluaXRpYWxseSBwbGFjZWQgZm9sZGluZyBhbm5vdGF0aW9uczwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdEZvbGRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIlhNTEZvbGRpbmdUZXN0MS54bWwiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQlMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE0MiwgMTYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxNzMsIDM2KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDE3OSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDcxLCAxMykpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDYyLCAxMDcpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig0NywgMTMpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig4NywgNDkpKTsKLQkJCi0JCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGVkaXRvci5nZXRUZXh0Vmlld2VyKCksIGV4cGVjdGVkUG9zaXRpb25zKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRoYXQgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgdXBkYXRlZCBhZnRlciBub2RlIGlzIHJlbW92ZWQ8L3A+Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZU5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIlhNTEZvbGRpbmdUZXN0MS54bWwiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQl0cnkgewotCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJCUlEb2N1bWVudCBkb2MgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCWRvYy5yZXBsYWNlKDg3LCA0OSwgIiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oOTMsIDE2KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyNCwgMzYpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDEzMCkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig3MSwgMTMpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNjIsIDU4KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ3LCAxMykpOwotCQkJCi0JCQl3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeSh2aWV3ZXIsIGV4cGVjdGVkUG9zaXRpb25zKTsKLQkJfSBjYXRjaChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJUZXN0IGlzIGJyb2tlbiwgcmVwbGFjZSBsb2NhdGlvbiBoYXMgYmVjb21lIGludmFsaWQuXG4iICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0aGF0IGZvbGRpbmcgYW5ub3RhdGlvbnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbm9kZSBpcyBhZGRlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkTm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiWE1MRm9sZGluZ1Rlc3QyLnhtbCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJZG9jLnJlcGxhY2UoMTQ5LCAwLCAiXG48YWRkTWU+XG5cblxuPC9hZGRNZT4iKTsKLQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkKLQkJCUxpc3QgZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE1MCwgMTgpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNjIsIDEyNikpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig0NywgMTMpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDE5OCkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxOTIsIDM2KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDcxLCAxMykpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxNDIsIDM1KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDg3LCA0OSkpOwotCQkJCi0JCQl3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeSh2aWV3ZXIsIGV4cGVjdGVkUG9zaXRpb25zKTsKLQkJfSBjYXRjaChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJUZXN0IGlzIGJyb2tlbiwgYWRkIGxvY2F0aW9uIGhhcyBiZWNvbWUgaW52YWxpZC5cbiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRoYXQgZXZlbiB0aG91Z2ggLnhzbCBkb2N1bWVudHMgZG8gbm90IGhhdmUgYSBzcGVjaWZpY2FsbHkgc3BlY2lmaWVkCi0JICogZm9sZGluZyBzdHJhdGVneSB0aGF0IGJ5IHRoZSBwb3dlciBvZiBoaWVyYXJjaGljYWwgY29udGVudCB0eXBlcyB0aGUgWE1MIGZvbGRpbmcKLQkgKiBzdHJhdGVneSBpcyB1c2VkIGZvciB0aGUgWFNMVCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZmlnVHlwZUhpZXJhcmNoeUV4cGxvcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIlhTTEZvbGRpbmdUZXN0MS54c2wiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCUxpc3QgZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTIwLCA4OCkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE0NywgNDQpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzOSwgMTg3KSk7Ci0JCQotCQl3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeShlZGl0b3IuZ2V0VGV4dFZpZXdlcigpLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0ZXN0IHRoZSBmb2xkaW5nIG9mIGNvbW1lbnRzPC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50cygpIHRocm93cyBFeGNlcHRpb257Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJYTUxGb2xkaW5nQ29tbWVudFRlc3QueG1sIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQlMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDI3NSwgMzYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxMjQsIDQ5KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTc5LCA4MSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAyODEpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxOTEsIDU2KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNjQsIDMxKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oOTksIDE3MikpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ3LCAxMykpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEwOCwgMTMpKTsKLQkJCi0JCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGVkaXRvci5nZXRUZXh0Vmlld2VyKCksIGV4cGVjdGVkUG9zaXRpb25zKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSBmaWxlIG5hbWUgaW4gPGNvZGU+ZlByb2plY3Q8L2NvZGU+IGF0dGVtcHRzIHRvIGdldCBhbiA8Y29kZT5JRmlsZTwvY29kZT4KLQkgKiBmb3IgaXQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgdGhlIHRlc3QgZmFpbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPklGaWxlPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIDxjb2RlPm5hbWU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZ2V0RmlsZShTdHJpbmcgbmFtZSkgewotCQlJRmlsZSBmaWxlID0gZlByb2plY3QuZ2V0RmlsZShuYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyBmaWxlICsgIiBjYW4gbm90IGJlIGZvdW5kIiwgZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSA8Y29kZT5maWxlPC9jb2RlPiBnZXQgYW4gZWRpdG9yIGZvciBpdC4gSWYgYW4gZWRpdG9yIGhhcyBhbHJlYWR5Ci0JICogYmVlbiByZXRyaWV2ZWQgZm9yIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPiB0aGVuIHJldHVybiB0aGUgc2FtZSBhbHJlYWR5Ci0JICogb3BlbiBlZGl0b3IuPC9wPgotCSAqIAotCSAqIDxwPldoZW4gb3BlbmluZyB0aGUgZWRpdG9yIGl0IHdpbGwgYWxzbyBzdGFuZGFyZGl6ZWQgdGhlIGxpbmUKLQkgKiBlbmRpbmdzIHRvIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBvcGVuIGFuZCByZXR1cm4gYW4gZWRpdG9yIGZvciB0aGlzCi0JICogQHJldHVybiA8Y29kZT5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjwvY29kZT4gb3BlbmVkIGZyb20gdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotLy8JCWVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0Ci0JCQotCQlpZihlZGl0b3IgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUsIHRydWUpOwotCQkJCWlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0JCQkJCVhNTE11bHRpUGFnZUVkaXRvclBhcnQgeG1sRWRpdG9yUGFydCA9IChYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KWVkaXRvclBhcnQ7Ci0JCQkJCWVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcil4bWxFZGl0b3JQYXJ0LmdldEFkYXB0ZXIoU3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpOwotCQkJCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGVkaXRvcik7Ci0JCQkJfSBlbHNlIGlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQllZGl0b3IgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWVkaXRvclBhcnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiB2aWV3ZXIgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogV2FpdHMgZm9yIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciB0byBmaW5pc2ggYW5kIHRoZW4gdmVyaWZpZXMgdGhhdCBvbmx5IGFuZCBhbGwKLQkgKiBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucyBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZSBnaXZlbiA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4KLQkgKiBpbiBoZXJlIGFmdGVyIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciBqb2IgaGFzIGZpbmlzaGVkCi0JICogQHBhcmFtIGV4cGVjdGVkUG9zaXRpb25zIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGVzZSBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiBhZnRlciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgam9iIGhhcyBmaW5pc2hlZAotCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSB2b2lkIHdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGZpbmFsIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlEb2N1bWVudCBkb2MgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZShkb2MgIT0gZlJlY29uY2lsZWREb2MgJiYgdGltZSA8PSBNQVhfV0FJVF9USU1FKSB7Ci0JCQlUaHJlYWQuc2xlZXAoV0FJVF9USU1FKTsKLQkJCXRpbWUgKz0gV0FJVF9USU1FOwotCQl9Ci0JCQotCQlpZihkb2MgPT0gZlJlY29uY2lsZWREb2MpIHsKLQkJCXZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnModmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gZWxzZSB7Ci0JCQlBc3NlcnQuZmFpbCgiRG9jdW1lbnQgIiArIHZpZXdlci5nZXREb2N1bWVudCgpICsgIiB3YXMgbm90IHJlY29uY2lsZWQgd2l0aCBpbiAiICsgTUFYX1dBSVRfVElNRSArCi0JCQkJCSIgc28gZ2F2ZSB1cCB3YWl0aW5nIGFuZCBpbiB0dXJuIGNvdWxkIG5vdCB2YWxpZGF0ZSBmb2xkaW5nIGFub3RhdGlvbnMgKFVJIGJsb2NrZWQ/KSIpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgb25seSBhbmQgYWxsIG9mIHRoZSA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4gaGF2ZSBmb2xkaW5nIGFubm90YXRpb25zCi0JICogaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGUgZ2l2ZW4gPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGluIGhlcmUgCi0JICogQHBhcmFtIGV4cGVjdGVkUG9zaXRpb25zIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGVzZSBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdmVyaWZ5QW5ub3RhdGlvblBvc2l0aW9ucyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIExpc3QgZXhwZWN0ZWRQb3NpdGlvbnMpIHsKLQkJUHJvamVjdGlvbkFubm90YXRpb25Nb2RlbCBwcm9qZWN0aW9uTW9kZWwgPSB2aWV3ZXIuZ2V0UHJvamVjdGlvbkFubm90YXRpb25Nb2RlbCgpOwotCQlJdGVyYXRvciBhbm5vdGF0aW9uSXRlciA9IHByb2plY3Rpb25Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCi0JCUxpc3QgdW5leHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCB1bmV4cGVjdGVkQW5ub3RhdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQl3aGlsZShhbm5vdGF0aW9uSXRlci5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBvYmogPSBhbm5vdGF0aW9uSXRlci5uZXh0KCk7Ci0JCQlpZihvYmogaW5zdGFuY2VvZiBQcm9qZWN0aW9uQW5ub3RhdGlvbikgewotCQkJCVByb2plY3Rpb25Bbm5vdGF0aW9uIGFubm90YXRpb24gPSAoUHJvamVjdGlvbkFubm90YXRpb24pb2JqOwotCQkJCVBvc2l0aW9uIHBvcyA9IHByb2plY3Rpb25Nb2RlbC5nZXRQb3NpdGlvbihhbm5vdGF0aW9uKTsKLQkJCQkKLQkJCQlib29sZWFuIGZvdW5kID0gZXhwZWN0ZWRQb3NpdGlvbnMucmVtb3ZlKHBvcyk7Ci0JCQkJaWYoIWZvdW5kKSB7Ci0JCQkJCXVuZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKHBvcyk7Ci0JCQkJCXVuZXhwZWN0ZWRBbm5vdGF0aW9ucy5hZGQoYW5ub3RhdGlvbik7Ci0JCQkJfQotCQkJCQotCQkJfQotCQl9Ci0JCQotCQlTdHJpbmcgZXJyb3IgPSAiIjsKLQkJaWYodW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgIT0gMCkgewotCQkJZXJyb3IgICs9ICJUaGVyZSB3ZXJlICIgKyB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSArICIgdW5leHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIGZvdW5kIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0JCQkJZXJyb3IgKz0gIlxuXHQiICsgdW5leHBlY3RlZFBvc2l0aW9ucy5nZXQoaSkgKyAiXHR0eXBlOiIgKyAoKEFubm90YXRpb24pIHVuZXhwZWN0ZWRBbm5vdGF0aW9ucy5nZXQoaSkpLmdldFR5cGUoKTsKLQkJCX0KLQkJfQotCQkKLQkJaWYoZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDAgKSB7Ci0JCQllcnJvciArPSAiXG5UaGVyZSB3ZXJlICIgKyBleHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgKyAiIGV4cGVjdGVkIHBvc2l0aW9ucyB0aGF0IHdlcmUgbm90IGZvdW5kIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFBvc2l0aW9ucy5zaXplKCk7ICsraSkgewotCQkJCWVycm9yICs9ICJcblx0IiArIGV4cGVjdGVkUG9zaXRpb25zLmdldChpKTsKLQkJCX0KLQkJfQotCQkKLQkJaWYoZXJyb3IubGVuZ3RoKCkgIT0gMCkgewotCQkJZmFpbChlcnJvcik7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+TGluZSBlbmRpbmdzIGNhbiBiZSBhbiBpc3N1ZSB3aGVuIHJ1bm5pbmcgdGVzdHMgb24gZGlmZmVyZW50IE9Tcy4KLQkgKiBUaGlzIGZ1bmN0aW9uIHN0YW5kYXJkaXplcyB0aGUgbGluZSBlbmRpbmdzIHRvIHVzZSA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogPHA+SXQgd2lsbCBnZXQgdGhlIHRleHQgZnJvbSB0aGUgZ2l2ZW4gZWRpdG9yLCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywKLQkgKiBhbmQgdGhlbiBzYXZlIHRoZSBlZGl0b3I8L3A+Ci0JICogCi0JICogQHBhcmFtIGVkaXRvciBzdGFuZGFyZGl6ZSB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSB0ZXh0IHByZXNlbnRlZCBpbiB0aGlzCi0JICogZWRpdG9yLgotCSAqLwotCXByaXZhdGUgdm9pZCBzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKFN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvcikgewotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKS5nZXREb2N1bWVudCgpOwotCQlTdHJpbmcgY29udGVudHMgPSBkb2MuZ2V0KCk7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJZG9jLnNldChjb250ZW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlRoaXMgaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBkbyBzZXQgdXAgYW5kIHRlYXIgZG93biBiZWZvcmUgYW5kCi0JICogYWZ0ZXIgKHJlc3BlY3RpdmVseSkgYWxsIHRlc3RzIGluIHRoZSBpbmNsb3NpbmcgY2xhc3MgaGF2ZSBydW4uPC9wPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIFhNTENvZGVGb2xkaW5nVGVzdFNldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBYTUxDb2RlRm9sZGluZ1Rlc3RTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkKLQkJCWluaXRpYWxpemVSZXNvdXJjZXMoKTsKLQkJCQotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQkKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9jbG9zZSBvdXQgdGhlIGVkaXRvcnMKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBmRmlsZVRvRWRpdG9yTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShpdGVyLmhhc05leHQoKSkgewotCQkJCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilpdGVyLm5leHQoKTsKLQkJCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCWVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCQkKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIFNldCB1cCB0aGUgcHJvamVjdCBhbmQgd29ya2JlbmNoLCB0aGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgb25jZQotCQkgKi8KLQkJcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0aWFsaXplUmVzb3VyY2VzKCkgewotCQkJZlByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbnVsbCk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIGlnbm9yZQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjYWJvdXRUb0JlUmVjb25jaWxlZCgpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlUmVjb25jaWxlZCgpIHsKLQkJLy9pZ25vcmUKLQl9Ci0KLQkvKioKLQkgKiBrZWVwIHRyYWNrIG9mIGxhc3QgZG9jdW1lbnQgcmVjb25jaWxlZAotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjcmVjb25jaWxlZChvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbCwgYm9vbGVhbiwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCi0JICovCi0JcHVibGljIHZvaWQgcmVjb25jaWxlZChJRG9jdW1lbnQgZG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwgbW9kZWwsCi0JCQlib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJZlJlY29uY2lsZWREb2MgPSBkb2N1bWVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTERpZmYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTRlNDg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MRGlmZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgWE1MRGlmZgotewotICBwcml2YXRlIExpc3QgZXJyb3JNZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIERJRkZfRUxFTUVOVF9OT0RFX09OTFkgPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZmlsZVR5cGUgPSAiIjsKLSAgcHVibGljIGJvb2xlYW4gZGlmZihTdHJpbmcgZmlsZTEsIFN0cmluZyBmaWxlMiwgU3RyaW5nIGZpbGVUeXBlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGRpZmYoZmlsZTEsZmlsZTIsIGZpbGVUeXBlLCBmYWxzZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIsIFN0cmluZyBmaWxlVHlwZSwgYm9vbGVhbiBlbGVtZW50T25seSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50IGRvYzEgPSBnZXREb2N1bWVudChmaWxlMSk7Ci0gICAgRG9jdW1lbnQgZG9jMiA9IGdldERvY3VtZW50KGZpbGUyKTsKLSAgCURJRkZfRUxFTUVOVF9OT0RFX09OTFkgPSBlbGVtZW50T25seTsKLSAgICByZXR1cm4gZGlmZihkb2MxLGRvYzIsIGZpbGVUeXBlKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZGlmZihEb2N1bWVudCBkb2MxLCBEb2N1bWVudCBkb2MyLCBTdHJpbmcgZmlsZVR5cGUpCi0gIHsKLSAgICBFbGVtZW50IHJvb3QxID0gZG9jMS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHJvb3QyID0gZG9jMi5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQl0aGlzLmZpbGVUeXBlID0gZmlsZVR5cGU7Ci0gICAgcmV0dXJuIGNvbXBhcmVOb2Rlcyhyb290MSxyb290Mik7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIHVyaSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIucGFyc2UodXJpKTsKLSAgICByZXR1cm4gZG9jOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZU5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpCi0gIHsKLSAgCWlmIChESUZGX0VMRU1FTlRfTk9ERV9PTkxZKQotICAJewotICAgICAgLy8gQ29tcGFyZSBvbmx5IGVsZW1lbnQgbm9kZXMgaW4gdGhlIGNoaWxkcmVuLgotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUxKTsKLSAgICAgIGZpbHRlck5vbkVsZW1lbnROb2Rlcyhub2RlMik7Ci0gIAl9Ci0gIAkKLSAgICBpZiAobm9kZTEuZ2V0Tm9kZVR5cGUoKSAhPSBub2RlMi5nZXROb2RlVHlwZSgpCi0gICAgICAgIHx8IG5vZGUxLmdldE5vZGVOYW1lKCkgIT0gbm9kZTIuZ2V0Tm9kZU5hbWUoKSkKLSAgICB7Ci0gICAgCWVycm9yTWVzc2FnZXMuYWRkKHRoaXMuZmlsZVR5cGUgKyAiOiBUeXBlIG9yIG5hbWUgZGlmZmVyZW50OiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSArICIgIiArIG5vZGUyLmdldE5vZGVOYW1lKCkgKyAiLiIpOwotICAgICAgcHJpbnRsbigiTm9kZSB0eXBlIG9yIG5vZGUgbmFtZSBpcyBkaWZmZXJlbnQ6Iik7Ci0gICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIWNvbXBhcmVBdHRyaWJ1dGVzKG5vZGUxLG5vZGUyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOb2RlTGlzdCBub2RlTGlzdDEgPSBub2RlMS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgTm9kZUxpc3Qgbm9kZUxpc3QyID0gbm9kZTIuZ2V0Q2hpbGROb2RlcygpOwotICAgIGlmIChub2RlTGlzdDEuZ2V0TGVuZ3RoKCkgIT0gbm9kZUxpc3QyLmdldExlbmd0aCgpKQotICAgIHsKLSAgICAJZXJyb3JNZXNzYWdlcy5hZGQodGhpcy5maWxlVHlwZSArICI6IE51bWJlciBvZiBjaGlsZHJlbiBkaWZmZXJlbnQ6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIi4iKTsKLSAgICAgIHByaW50bG4oIlRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZGlmZmVyZW50OiIpOwotICAgICAgLy9wcmludGxuKCJOb2RlIDE6ICIgKyBub2RlTGlzdDEuZ2V0TGVuZ3RoKCkpOwotICAgICAgLy9wcmludGxuKCJOb2RlIDI6ICIgKyBub2RlTGlzdDIuZ2V0TGVuZ3RoKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBsZW5ndGggPSBub2RlTGlzdDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGNvbXBhcmVOb2Rlcyhub2RlTGlzdDEuaXRlbShpKSxub2RlTGlzdDIuaXRlbShpKSk7Ci0gICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgCXJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlsdGVyTm9uRWxlbWVudE5vZGVzKE5vZGUgbm9kZSkKLSAgewotICAgIE5vZGUgZmlyc3RDaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChmaXJzdENoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgbm9kZS5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTsKLSAgICAgIGZpcnN0Q2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSBzaWJsaW5nID0gZmlyc3RDaGlsZC5nZXROZXh0U2libGluZygpOwotICAgIE5vZGUgZGVsZXRlTWUgPSBudWxsOwotICAgIHdoaWxlIChzaWJsaW5nICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHNpYmxpbmcuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgIAlkZWxldGVNZSA9IHNpYmxpbmc7Ci0gICAgICAJc2libGluZyA9IHNpYmxpbmcuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChkZWxldGVNZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlQXR0cmlidXRlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAxID0gbm9kZTEuZ2V0QXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMiA9IG5vZGUyLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICBpZiAobm9kZU1hcDEgPT0gbnVsbCB8fCBub2RlTWFwMiA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChub2RlTWFwMSA9PSBudWxsICYmIG5vZGVNYXAyID09IG51bGwpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlTWFwMS5nZXRMZW5ndGgoKSAhPSBub2RlTWFwMi5nZXRMZW5ndGgoKSkKLSAgICB7Ci0gICAgCWVycm9yTWVzc2FnZXMuYWRkKHRoaXMuZmlsZVR5cGUgKyAiOiBOdW1iZXIgb2YgYXR0cmlidXRlcyBkaWZmZXJlbnQ6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIi4iKTsKLSAgICAJcHJpbnRsbigiVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIE5vZGUgYXR0ck5vZGUxID0gbnVsbDsKLSAgICBOb2RlIGF0dHJOb2RlMiA9IG51bGw7Ci0gICAgaW50IGxlbmd0aCA9IG5vZGVNYXAxLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyTm9kZTEgPSBub2RlTWFwMS5pdGVtKGkpOwotICAgICAgYXR0ck5vZGUyID0gbm9kZU1hcDIuZ2V0TmFtZWRJdGVtKGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIGlmIChhdHRyTm9kZTIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAllcnJvck1lc3NhZ2VzLmFkZCh0aGlzLmZpbGVUeXBlICsgIjogQXR0cmlidXRlIG5vdCBmb3VuZDogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLiIpOwotICAgIAlwcmludGxuKCJUaGUgYXR0cmlidXRlIGlzIG5vdCBmb3VuZCBpbiBOb2RlIDI6ICIgKyBhdHRyTm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIWF0dHJOb2RlMS5nZXROb2RlVmFsdWUoKS5lcXVhbHMoYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpKSkKLSAgICAgIHsKLSAgICAgIAllcnJvck1lc3NhZ2VzLmFkZCh0aGlzLmZpbGVUeXBlICsgIjogQXR0cmlidXRlIHZhbHVlcyBkaWZmZXJlbnQ6ICIgKyBhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkgKyAiICIgKyBhdHRyTm9kZTIuZ2V0Tm9kZVZhbHVlKCkgKyAiLiIpOwotICAgIAlwcmludGxuKCJUaGUgYXR0cmlidXRlIHZhbHVlcyBhcmUgZGlmZmVyZW50OiIpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUxLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSArICIsIiArIGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICAvL291dC5wcmludGxuKHMpOwotICB9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVycm9yTWVzc2FnZXMuCi0JICovCi0JcHVibGljIExpc3QgZ2V0RXJyb3JNZXNzYWdlcygpCi0JewotCQlyZXR1cm4gZXJyb3JNZXNzYWdlczsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZWFlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBYTUwgU291cmNlIGVkaXRvcgotICogcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUik7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIrcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7CQkKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPD06Iik7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUiwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUik7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsJCQotCQlTdHJpbmcgb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsJLy8gcmFuZG9tIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMWU2Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjU5NDQ3IC0gY29udGVudCBhc3Npc3RhbmNlIHRlc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdE1hcmt1cFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50bW9kZWwuVGVzdEluZmVycmVkQ29udGVudE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotCi0KLXB1YmxpYyBjbGFzcyBYTUxVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFhNTFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIFhNTFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiWE1MIFVJIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChYTUxDb2RlRm9sZGluZ1Rlc3Quc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RPcGVuRWRpdG9yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QoKG5ldyBUZXN0U3VpdGUoVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKSkpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE5ld1hNTEdlbmVyYXRvci5jbGFzcykpOwotCQlhZGRUZXN0U3VpdGUoVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdE1hcmt1cFZhbGlkYXRvci5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0UmVjb25jaWxlclhNTC5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5jbGFzcyk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5LmNsYXNzLCAiVGVzdCBTcGVsbGNoZWNrIERlbGVnYXRlIEFkYXB0ZXIgRmFjdG9yeSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RJbmZlcnJlZENvbnRlbnRNb2RlbC5jbGFzcywgIlRlc3QgSW5mZXJyZWQgR3JhbW1hciBTdXBwb3J0IikpOwotCQlhZGRUZXN0KFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLnN1aXRlKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYzRmY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI1OTQ0NyAtIGNvbnRlbnQgYXNzaXN0YW5jZSB0ZXN0cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFhNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCXByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgWE1MVUlUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW5CdW5kbGUgPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotICAgIC8qKgotICAgICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAgICogCi0gICAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgICB7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgIAlyZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JICAgIHsKLQkgICAgCXJldHVybiBudWxsOwotCSAgICB9Ci0JICB9Ci0gICAgCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfSAgICAKLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYzdiYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5leHRlbnNpb25zLklTb3VyY2VFZGl0aW5nVGV4dFRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5icmVha3BvaW50LklCcmVha3BvaW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBCcmVha3BvaW50RXJyb3JQcm92aWRlciBpbXBsZW1lbnRzIElCcmVha3BvaW50UHJvdmlkZXIgewotCi0JSVNvdXJjZUVkaXRpbmdUZXh0VG9vbHMgZlRvb2w7Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklCcmVha3BvaW50UHJvdmlkZXIjYWRkQnJlYWtwb2ludChvcmcudzNjLmRvbS5Eb2N1bWVudCwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50LCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQsCi0JICogICAgICBvcmcudzNjLmRvbS5Ob2RlLCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhZGRCcmVha3BvaW50KElEb2N1bWVudCBpZG9jLCBJRWRpdG9ySW5wdXQgaW5wdXQsIGludCBsaW5lTnVtYmVyLCBpbnQgb2Zmc2V0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZSA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmIChlbmFibGUpCi0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5FUlJPUiwgIlRlc3QgRXJyb3IhIiwgbnVsbCk7Ci0JCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLCBJU3RhdHVzLk9LLCAiIiwgbnVsbCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2dldFJlc291cmNlKG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCkKLQkgKi8KLQlwdWJsaWMgSVJlc291cmNlIGdldFJlc291cmNlKElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlJUmVzb3VyY2UgcmVzID0gKElSZXNvdXJjZSkgaW5wdXQuZ2V0QWRhcHRlcihJRmlsZS5jbGFzcyk7Ci0JCWlmIChyZXMgPT0gbnVsbCkKLQkJCXJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSVJlc291cmNlLmNsYXNzKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklCcmVha3BvaW50UHJvdmlkZXIjc2V0U291cmNlRWRpdGluZ1RleHRUb29scyhvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5Tb3VyY2VFZGl0aW5nVGV4dFRvb2xzKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMoSVNvdXJjZUVkaXRpbmdUZXh0VG9vbHMgdG9vbCkgewotCQlmVG9vbCA9IHRvb2w7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0VuYWJsZVdhcm5pbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhN2Y2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0VuYWJsZVdhcm5pbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkRWRpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkU2ltcGxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgRW5hYmxlV2FybmluZ0FjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFeHRlbmRlZEVkaXRvckFjdGlvbiB7Ci0JSUV4dGVuZGVkU2ltcGxlRWRpdG9yIGFjdGl2ZUVkaXRvcjsKLQotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKCkgewotCQlzdXBlcigpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gaW1hZ2UKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBzdHlsZQotCSAqLwotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI2lzVmlzaWJsZSgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3J1bigpCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlzdXBlci5ydW4oKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gdmFsdWUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZSgiYnJlYWstZXJyb3IiLCAhdmFsdWUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI3NldEFjdGl2ZUV4dGVuZGVkRWRpdG9yKG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZFNpbXBsZUVkaXRvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFeHRlbmRlZEVkaXRvcihJRXh0ZW5kZWRTaW1wbGVFZGl0b3IgdGFyZ2V0RWRpdG9yKSB7Ci0JCWFjdGl2ZUVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVVwZGF0ZSN1cGRhdGUoKQotCSAqLwotCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29tbWVudGVsZW1lbnQvQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbW1lbnRlbGVtZW50L0NvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk3ODM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29tbWVudGVsZW1lbnQvQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuY29tbWVudGVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29tbWVudGVsZW1lbnQuQ29tbWVudEVsZW1lbnRIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb21tZW50ZWxlbWVudC51dGlsLkNvbW1lbnRFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29tbWVudGVsZW1lbnQudXRpbC5UYWdTY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi1wdWJsaWMgY2xhc3MgQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vIGltcGxlbWVudHMgQ29tbWVudEVsZW1lbnRIYW5kbGVyewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9ICJmb28iOyAvLyROT04tTkxTLTEkCi0JcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIGRhdGEsIGJvb2xlYW4gaXNKU1BUYWcpIHsKLQotCQlUYWdTY2FubmVyIHNjYW5uZXIgPSBuZXcgVGFnU2Nhbm5lcihkYXRhLCAxKTsKLQkJU3RyaW5nIG5hbWUgPSBzY2FubmVyLm5leHROYW1lKCk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKG5hbWUubGVuZ3RoKCkgKyA0KTsKLQkJYnVmZmVyLmFwcGVuZChQUkVGSVgpOwotCQlidWZmZXIuYXBwZW5kKCc6Jyk7Ci0JCWJ1ZmZlci5hcHBlbmQobmFtZSk7Ci0JCVN0cmluZyB0YWdOYW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0KLQkJQ29tbWVudEVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBuZXcgQ29tbWVudEVsZW1lbnRGYWN0b3J5KGRvY3VtZW50LCBpc0pTUFRhZywgdGhpcyk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlKHRhZ05hbWUsIENvbW1lbnRFbGVtZW50RmFjdG9yeS5JU19TVEFSVCk7Ci0KLQkJLy8gc2V0IGF0dHJpYnV0ZXMKLQkJU3RyaW5nIGF0dHJOYW1lID0gc2Nhbm5lci5uZXh0TmFtZSgpOwotCQl3aGlsZSAoYXR0ck5hbWUgIT0gbnVsbCkgewotCQkJU3RyaW5nIGF0dHJWYWx1ZSA9IHNjYW5uZXIubmV4dFZhbHVlKCk7Ci0JCQlBdHRyIGF0dHIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoYXR0ck5hbWUpOwotCQkJaWYgKGF0dHIgIT0gbnVsbCkgewotCQkJCWlmIChhdHRyVmFsdWUgIT0gbnVsbCkKLQkJCQkJYXR0ci5zZXRWYWx1ZShhdHRyVmFsdWUpOwotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCX0KLQkJCWF0dHJOYW1lID0gc2Nhbm5lci5uZXh0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2VuZXJhdGVFbmRUYWdDb250ZW50KElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZW5lcmF0ZVN0YXJ0VGFnQ29udGVudChJRE9NRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1ZmZlci5hcHBlbmQoJyMnKTsKLQkJYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlpbnQgbGVuZ3RoID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCWlmIChhdHRyID09IG51bGwpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQoJyAnKTsKLQkJCVN0cmluZyBhdHRyTmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCWlmIChhdHRyTmFtZSAhPSBudWxsKSB7Ci0JCQkJYnVmZmVyLmFwcGVuZChhdHRyTmFtZSk7Ci0JCQl9Ci0JCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCWlmIChhdHRyVmFsdWUgIT0gbnVsbCkgewotCQkJCS8vIGF0dHIgbmFtZSBvbmx5IGZvciBIVE1MIGJvb2xlYW4gYW5kIEpTUAotCQkJCWJ1ZmZlci5hcHBlbmQoJz0nKTsKLQkJCQlidWZmZXIuYXBwZW5kKGF0dHJWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDb21tZW50RWxlbWVudChJRE9NRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZyBwcmVmaXggPSBlbGVtZW50LmdldFByZWZpeCgpOwotCQlpZiAocHJlZml4ID09IG51bGwgfHwgIXByZWZpeC5lcXVhbHMoUFJFRklYKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCVN0cmluZyB0YWdOYW1lID0gZWxlbWVudC5nZXRUYWdOYW1lKCk7Ci0JCWlmICh0YWdOYW1lLmxlbmd0aCgpIDw9IDQpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDdiNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI1OTQ0NyAtIGludGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gbWFrZSB1c2Ugb2YgKGNvcHkgb2YgSlNQIFVJIFRlc3RzJykgUHJvamVjdFV0aWwgdG8gc2tpcAotICogICAgICAgICBmaWxlLXN5c3RlbSBjYWxscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWE1MQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlByb2plY3RVdGlsOwotCi0vKioKLSAqIFRlc3RzIGV2ZXJ5dGhpbmcgYWJvdXQgY29kZSBjb21wbGV0aW9uIGFuZCBjb2RlIGFzc2lzdGFuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RYTUxDb250ZW50QXNzaXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIFN0cmluZyBwcm9qZWN0TmFtZSA9IG51bGw7Ci0JcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0JcHJvdGVjdGVkIElGaWxlIGZpbGUgPSBudWxsOwotCXByb3RlY3RlZCBJRWRpdG9yUGFydCB0ZXh0RWRpdG9yUGFydCA9IG51bGw7Ci0JcHJvdGVjdGVkIElUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBudWxsOwotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQlwcm90ZWN0ZWQgU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWw7Ci0JcHJvdGVjdGVkIFhNTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgeG1sQ29udGVudEFzc2lzdFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgVGVzdFhNTENvbnRlbnRBc3Npc3QoKSB7Ci0JfQotCi0JLyoqCi0JICogU2V0dXAgdGhlIG5lY2Vzc2FyeSBwcm9qZWN0cywgZmlsZXMsIGFuZCBzb3VyY2Ugdmlld2VyIGZvciB0aGUgdGVzdHMuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJcHJvamVjdE5hbWUgPSAiVGVzdFhNTENvbnRlbnRBc3Npc3QiOwotCQlmaWxlTmFtZSA9ICJ4bWxDb250ZW50QXNzaXN0LXRlc3QxLnhtbCI7Ci0KLQkJLy8gU2V0dXAgdGhlIFByb2plY3QgYW5kIEZpbGUgdG8gYmUgdXNlZCBkdXJpbmcgdGhlIHRlc3QuCi0JCVN0cmluZyB4bWxGaWxlUGF0aCA9IHNldHVwUHJvamVjdCgpOwotCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKAotCQkJCW5ldyBQYXRoKHhtbEZpbGVQYXRoKSk7Ci0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCUFzc2VydC5mYWlsKCJVbmFibGUgdG8gbG9jYXRlICIgKyB4bWxGaWxlUGF0aCArICIuIik7Ci0JCX0KLQotCQlsb2FkWE1MRmlsZSgpOwotCi0JCWluaXRpYWxpemVTb3VyY2VWaWV3ZXIoKTsKLQkJeG1sQ29udGVudEFzc2lzdFByb2Nlc3NvciA9IG5ldyBYTUxDb250ZW50QXNzaXN0UHJvY2Vzc29yKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpIHsKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKQotCQkJCQkJLmdldFNoZWxsKCk7Ci0JCQl9IGVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlzb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwKLQkJCQkJU1dULk5PTkUpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0Ci0JCQkJCS5mYWlsKCJVbmFibGUgdG8gcnVuIHRoZSB0ZXN0IGFzIGEgZGlzcGxheSBtdXN0IGJlIGF2YWlsYWJsZS4iKTsKLQkJfQotCi0JCWNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpIHsKLQkJc291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkpOwotCi0JCXNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgbG9hZFhNTEZpbGUoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLAotCQkJSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHNldHVwUHJvamVjdCgpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKQotCQkJCS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdE5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQotCQl9Ci0JCVN0cmluZyB4bWxGaWxlUGF0aCA9IHByb2plY3QuZ2V0RnVsbFBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpLmFwcGVuZChmaWxlTmFtZSkudG9TdHJpbmcoKTsKLQkJLy8gbmVlZHMgYm90aCB0aGUgdGVzdCBmaWxlIGFuZCBzY2hlbWFzCi0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RyZXNvdXJjZXMiLCBwcm9qZWN0LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0JCXJldHVybiB4bWxGaWxlUGF0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQl4bWxDb250ZW50QXNzaXN0UHJvY2Vzc29yLnJlbGVhc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGNvbnRlbnQgY29tcGxldGlvbiBwcm9wb3NhbHMgYXQgPGNvZGU+bGluZU51bWJlcjwvY29kZT4sCi0JICogPGNvZGU+Y29sdW1uTnVtYmVyPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gbGluZU51bWJlcgotCSAqIEBwYXJhbSBjb2x1bW5OdW1iZXIKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBnZXRQcm9wb3NhbHMoaW50IG9mZnNldCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlyZXR1cm4geG1sQ29udGVudEFzc2lzdFByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscygKLQkJCQlzb3VyY2VWaWV3ZXIsIG9mZnNldCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZVByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgxMCkgKyAxMDsKLQkJCUlET01Ob2RlIG5vZGUgPSAoSURPTU5vZGUpIENvbnRlbnRBc3Npc3RVdGlscy5nZXROb2RlQXQoCi0JCQkJCXNvdXJjZVZpZXdlciwgb2Zmc2V0KTsKLQkJCWFzc2VydEVxdWFscygiV3Jvbmcgbm9kZSBuYW1lIHJldHVybmVkOiIsICJNZW1iZXIiLCBub2RlCi0JCQkJCS5nZXROb2RlTmFtZSgpKTsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0VHJ1ZSgiTGVuZ3RoIGxlc3MgdGhhbiAxIiwgcHJvcG9zYWxzLmxlbmd0aCA+IDEpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgYXR0cmlidXRlIHByb3Bvc2FsIHJldHVybmVkIGF0IFsiK3NvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldChvZmZzZXQtOSwgOSkrInwiK3NvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldChvZmZzZXQsIDkpKyJdIiwgImhhbmRpY2FwIiwKLQkJCQkJcHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENoaWxkRWxlbWVudFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgxMSkgKyA4OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDUsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgZWxlbWVudCBwcm9wb3NhbCByZXR1cm5lZC4iLCAiRXhjbHVzaXZlTWVtYmVyIiwKLQkJCQkJcHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoYWZ0RWxlbWVudFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgyNCkgKyA2OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDcsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgZWxlbWVudCBwcm9wb3NhbCByZXR1cm5lZC4iLCAiU2hhZnQiLCBwcm9wb3NhbAotCQkJCQkuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTFRlbXBsYXRlUG9zaXRpb25hbFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgyNCkgKyA2OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDcsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1s1XTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgdGVtcGxhdGUgcHJvcG9zYWwgcmV0dXJuZWQuIiwKLQkJCQkJImNvbW1lbnQgLSB4bWwgY29tbWVudCIsIHByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxDb21tZW50VGVtcGxhdGVQcm9wb3NhbEV4aXN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMjQpICsgNjsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcG9zYWxzIHJldHVybmVkLiIsIHByb3Bvc2Fscyk7Ci0JCQlib29sZWFuIGZvdW5kc3cgPSBmYWxzZTsKLQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHByb3Bvc2Fscy5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1tjbnRdOwotCQkJCWlmIChwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkuZXF1YWxzKCJjb21tZW50IC0geG1sIGNvbW1lbnQiKSkgewotCQkJCQlmb3VuZHN3ID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZm91bmRzdyA9PSBmYWxzZSkgewotCQkJCWZhaWwoIlhNTCBUZW1wbGF0ZSAneG1sIGNvbW1lbnQnIHdhcyBub3QgZm91bmQgaW4gdGhlIHByb3Bvc2FsIGxpc3QiKTsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZWNlY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlByb2plY3RVdGlsOwotCi1wdWJsaWMgY2xhc3MgVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycyI7Ci0JCi0JLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QiOwotCQotCS8qKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMoKSB7Ci0JCXN1cGVyKCJUZXN0IFhNTCBDb250ZW50IEFzc2lzdCBDb21wdXRlcnMiKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmNsYXNzLCAiVGVzdCBYTUwgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JCXJldHVybiBuZXcgVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCh0cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDaGlsZEVsZW1lbnRQcm9wb3NhbHMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezUsIDIsIDMsIDV9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLnhtbCIsIDExLCA4LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENoaWxkRWxlbWVudFByb3Bvc2FsczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NywgMiwgNSwgN307Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEueG1sIiwgMjQsIDYsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezUsIDQsIDEsIDV9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLnhtbCIsIDEwLCAxMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnTmFtZVByb3Bzb2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxLCAwLCAxLCAxfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0Mi54bWwiLCAyLCAxOSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnUHJvcHNvYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezYsIDQsIDIsIDZ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QyLnhtbCIsIDMsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5SdW4gYSBwcm9wb3NhbCB0ZXN0IGJ5IG9wZW5pbmcgdGhlIGdpdmVuIGZpbGUgYW5kIGludm9raW5nIGNvbnRlbnQgYXNzaXN0IGZvcgotCSAqIGVhY2ggZXhwZWN0ZWQgcHJvcG9zYWwgY291bnQgYXQgdGhlIGdpdmVuIGxpbmUgbnVtYmVyIGFuZCBsaW5lIGNoYXJhY3RlcgotCSAqIG9mZnNldCBhbmQgdGhlbiBjb21wYXJlIHRoZSBudW1iZXIgb2YgcHJvcG9zYWxzIGZvciBlYWNoIGludm9jYXRpb24gKHBhZ2VzKSB0byB0aGUKLQkgKiBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZU5hbWUKLQkgKiBAcGFyYW0gbGluZU51bQotCSAqIEBwYXJhbSBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0Ci0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcnVuUHJvcG9zYWxUZXN0KFN0cmluZyBmaWxlTmFtZSwKLQkJCWludCBsaW5lTnVtLCBpbnQgbGluZVJlbGF0aXZlQ2hhck9mZnNldCwKLQkJCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpIHRocm93cyBFeGNlcHRpb257Ci0JCQotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCWludCBvZmZzZXQgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXRMaW5lT2Zmc2V0KGxpbmVOdW0pICsgbGluZVJlbGF0aXZlQ2hhck9mZnNldDsKLQotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IGdldFByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cy5sZW5ndGgpOwotCQkKLQkJdmVyaWZ5UHJvcG9zYWxDb3VudHMocGFnZXMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5JbnZva2UgY29udGVudCBhc3Npc3Qgb24gdGhlIGdpdmVuIHZpZXdlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBwYWdlcwotCSAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdHMgb2YgZWFjaCBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHBhcmFtIHBhZ2VDb3VudAotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIGdldFByb3Bvc2FscyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIGludCBvZmZzZXQsIGludCBwYWdlQ291bnQpIHRocm93cyBFeGNlcHRpb24gewotCQkvL3NldHVwIHRoZSB2aWV3ZXIKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCk7Ci0JCUNvbnRlbnRBc3Npc3RhbnQgY29udGVudEFzc2lzdGFudCA9IChDb250ZW50QXNzaXN0YW50KWNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEFzc2lzdGFudCh2aWV3ZXIpOwotCQl2aWV3ZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24pOwotCQl2aWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShvZmZzZXQsIDApOwotCQkKLQkJLy9nZXQgdGhlIHByb2Nlc3NvcgotCQlTdHJpbmcgcGFydGl0aW9uVHlwZUlEID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFydGl0aW9uKG9mZnNldCkuZ2V0VHlwZSgpOwotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBjb250ZW50QXNzaXN0YW50LmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3IocGFydGl0aW9uVHlwZUlEKTsKLQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBhYm91dCB0byBzdGFydAotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZCA9IENvbnRlbnRBc3Npc3RhbnQuY2xhc3MuCi0JCSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uQmVnaW5FdmVudCIsIG5ldyBDbGFzc1tdIHtib29sZWFuLmNsYXNzfSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbmV3IE9iamVjdFtdIHtCb29sZWFuLlRSVUV9KTsKLQotCQkvL2dldCBjb250ZW50IGFzc2lzdCBzdWdnZXN0aW9ucwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW3BhZ2VDb3VudF1bXTsKLQkJZm9yKGludCBwID0gMDsgcCA8IHBhZ2VDb3VudDsgKytwKSB7Ci0JCQlwYWdlc1twXSA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCX0KLQkJCi0JCS8vZmlyZSBjb250ZW50IGFzc2lzdCBzZXNzaW9uIGVuZGluZwotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotICAgICAgICBnZXREZWNsYXJlZE1ldGhvZCgiZmlyZVNlc3Npb25FbmRFdmVudCIsIG51bGwpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbnVsbCk7Ci0JCQotCQlyZXR1cm4gcGFnZXM7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbXBhcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMgcGVyIHBhZ2UgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgcHJvcG9zYWxzCi0JICogcGVyIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHBhZ2VzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeVByb3Bvc2FsQ291bnRzKElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzLCBpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB7Ci0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yKGludCBwYWdlID0gMDsgcGFnZSA8IGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoOyArK3BhZ2UpIHsKLQkJCWlmKGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0gIT0gcGFnZXNbcGFnZV0ubGVuZ3RoKSB7Ci0JCQkJZXJyb3IuYXBwZW5kKCJcblByb3Bvc2FsIHBhZ2UgIiArIHBhZ2UgKyAiIGRpZCBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fsczogd2FzICIgKwotCQkJCQkJcGFnZXNbcGFnZV0ubGVuZ3RoICsgIiBleHBlY3RlZCAiICsgZXhwZWN0ZWRQcm9wb3NhbENvdW50c1twYWdlXSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8vaWYgZXJyb3JzIHJlcG9ydCB0aGVtCi0JCWlmKGVycm9yLmxlbmd0aCgpID4gMCkgewotCQkJQXNzZXJ0LmZhaWwoZXJyb3IudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSBmaWxlIG5hbWUgaW4gPGNvZGU+ZlByb2plY3Q8L2NvZGU+IGF0dGVtcHRzIHRvIGdldCBhbiA8Y29kZT5JRmlsZTwvY29kZT4KLQkgKiBmb3IgaXQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgdGhlIHRlc3QgZmFpbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPklGaWxlPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIDxjb2RlPm5hbWU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZ2V0RmlsZShTdHJpbmcgbmFtZSkgewotCQlJRmlsZSBmaWxlID0gZlByb2plY3QuZ2V0RmlsZShuYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyBmaWxlICsgIiBjYW4gbm90IGJlIGZvdW5kIiwgZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSA8Y29kZT5maWxlPC9jb2RlPiBnZXQgYW4gZWRpdG9yIGZvciBpdC4gSWYgYW4gZWRpdG9yIGhhcyBhbHJlYWR5Ci0JICogYmVlbiByZXRyaWV2ZWQgZm9yIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPiB0aGVuIHJldHVybiB0aGUgc2FtZSBhbHJlYWR5Ci0JICogb3BlbiBlZGl0b3IuPC9wPgotCSAqIAotCSAqIDxwPldoZW4gb3BlbmluZyB0aGUgZWRpdG9yIGl0IHdpbGwgYWxzbyBzdGFuZGFyZGl6ZWQgdGhlIGxpbmUKLQkgKiBlbmRpbmdzIHRvIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBvcGVuIGFuZCByZXR1cm4gYW4gZWRpdG9yIGZvciB0aGlzCi0JICogQHJldHVybiA8Y29kZT5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjwvY29kZT4gb3BlbmVkIGZyb20gdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RydWN0dXJlZFRleHRFZGl0b3IgZ2V0RWRpdG9yKElGaWxlIGZpbGUpICB7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilmRmlsZVRvRWRpdG9yTWFwLmdldChmaWxlKTsKLQkJCi0JCWlmKGVkaXRvciA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQkJaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHsKLQkJCQkJWE1MTXVsdGlQYWdlRWRpdG9yUGFydCB4bWxFZGl0b3JQYXJ0ID0gKFhNTE11bHRpUGFnZUVkaXRvclBhcnQpZWRpdG9yUGFydDsKLQkJCQkJZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKXhtbEVkaXRvclBhcnQuZ2V0QWRhcHRlcihTdHJ1Y3R1cmVkVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJfSBlbHNlIGlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQllZGl0b3IgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWVkaXRvclBhcnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhlZGl0b3IpOwotCQkJCQlmRmlsZVRvRWRpdG9yTWFwLnB1dChmaWxlLCBlZGl0b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSArICIgZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQkKLQkvKioKLQkgKiA8cD5MaW5lIGVuZGluZ3MgY2FuIGJlIGFuIGlzc3VlIHdoZW4gcnVubmluZyB0ZXN0cyBvbiBkaWZmZXJlbnQgT1NzLgotCSAqIFRoaXMgZnVuY3Rpb24gc3RhbmRhcmRpemVzIHRoZSBsaW5lIGVuZGluZ3MgdG8gdXNlIDxjb2RlPlxuPC9jb2RlPjwvcD4KLQkgKiAKLQkgKiA8cD5JdCB3aWxsIGdldCB0aGUgdGV4dCBmcm9tIHRoZSBnaXZlbiBlZGl0b3IsIGNoYW5nZSB0aGUgbGluZSBlbmRpbmdzLAotCSAqIGFuZCB0aGVuIHNhdmUgdGhlIGVkaXRvcjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZWRpdG9yIHN0YW5kYXJkaXplIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIHRleHQgcHJlc2VudGVkIGluIHRoaXMKLQkgKiBlZGl0b3IuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKFN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvcikgewotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKS5nZXREb2N1bWVudCgpOwotCQlTdHJpbmcgY29udGVudHMgPSBkb2MuZ2V0KCk7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJZG9jLnNldChjb250ZW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlRoaXMgaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBkbyBzZXQgdXAgYW5kIHRlYXIgZG93biBiZWZvcmUgYW5kCi0JICogYWZ0ZXIgKHJlc3BlY3RpdmVseSkgYWxsIHRlc3RzIGluIHRoZSBpbmNsb3NpbmcgY2xhc3MgaGF2ZSBydW4uPC9wPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAgZXh0ZW5kcyBUZXN0U2V0dXAgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JCXByaXZhdGUgc3RhdGljIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCQkKLQkJLyoqCi0JCSAqIERlZmF1bHQgY29uc3RydWN0b3IKLQkJICogCi0JCSAqIEBwYXJhbSB0ZXN0IGRvIHNldHVwIGZvciB0aGUgZ2l2ZW4gdGVzdAotCQkgKi8KLQkJcHVibGljIFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9zZXR1cCBwcm9wZXJ0aWVzCi0JCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFKTsKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQkJCi0JCQkvL3NldHVwIHByb2plY3QKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL2Nsb3NlIG91dCB0aGUgZWRpdG9ycwotCQkJSXRlcmF0b3IgaXRlciA9IGZGaWxlVG9FZGl0b3JNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWl0ZXIubmV4dCgpOwotCQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkJZWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCX0KLQkJCQotCQkJLy9yZW1vdmUgcHJvamVjdAotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCQkvL3Jlc3RvcmUgcHJvcGVydGllcwotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RJbmZlcnJlZENvbnRlbnRNb2RlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEluZmVycmVkQ29udGVudE1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGE5MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEluZmVycmVkQ29udGVudE1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmVkaXRvci5FZGl0b3JNb2RlbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdEluZmVycmVkQ29udGVudE1vZGVsIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RJbmZlcnJlZENvbnRlbnRNb2RlbCgpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5mZXJyZWRBdHRyVHlwZURlZmF1bHRfYnVnMzE4MTA4KCkgewotCQlib29sZWFuIHVzZUluZmVycmVkID0gWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIpOwotCQlYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIsIHRydWUpOwotCQkKLQkJCi0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxyb290PlxuPGEgcj1cIjFcIi8+XG48YT5cbjwvcm9vdD5cbiIpOwotCQkKLQkJRWRpdG9yTW9kZWxVdGlsLmFkZEZhY3Rvcmllc1RvKG1vZGVsKTsKLQkJLy8gbmVlZCB0byB3YWl0IGZvciBkZWxheWVkIERPTU9ic2VydmVyIHRvIGJ1aWxkIGluZmVycmVkIGNvbnRlbnQgbW9kZWwKLQkJdHJ5IHsKLQkJCVRocmVhZC5zbGVlcCg1MDAwKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZTEpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlOb2RlTGlzdCBlbGVtZW50c0J5VGFnTmFtZSA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHNCeVRhZ05hbWUuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBlbGVtZW50c0J5VGFnTmFtZS5pdGVtKGkpOwotCQkJCWEuZ2V0QXR0cmlidXRlKCJyIik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MzE4MTA4Ci0JCQlmYWlsKGUudG9TdHJpbmcoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIsIHVzZUluZmVycmVkKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmE4OWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLkxvZ2dlcjsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0gICAgcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkgewotICAgICAgICBzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwiKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCQotCQkvLyBzb21lIHRlc3QgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIGEgInJlYWwiIGRpc3BsYXkKLQkJaWYoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDApOwotCX0KLQkKLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZW50UHJlZml4ZXMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcmVmaXhlcyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGluZGVudCBwcmVmaXhlcyIsIGZhbHNlKTsKLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9DcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGlzIG51bGwiLCBpbmZvQ3JlYXRvcik7Ci0gICAgfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciBpcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIGlzIG51bGwiLCByKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRIb3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGhvdmVyUGFydGl0aW9ucyA9IG5ldyBTdHJpbmdbXXtJU3RydWN0dXJlZFBhcnRpdGlvbnMuREVGQVVMVF9QQVJUSVRJT04sIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dEhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRUZXh0SG92ZXIoZlZpZXdlciwgaG92ZXJQYXJ0aXRpb25zW2ldLCBTV1QuTk9ORSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJob3ZlciB3YXMgbnVsbCBmb3IgcGFydGl0aW9uOiAiICsgaG92ZXJQYXJ0aXRpb25zW2ldLCBob3Zlcik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0WE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0WE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOTgzNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdFhNTCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0KLQkJaW50IGxlbmd0aFZhbHVlOwotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0KLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48IURPQ1RZUEUgdGFnbGliIFBVQkxJQyBcIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTlwiIFwiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZFwiPlxuIjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IFhNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjhlMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0wLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiMTUwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0wLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyLz4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICA8U2hhZnQ+PC9TaGFmdD4KLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1OWY0NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZSBOdW1iZXJPZkhvbGVzPSIxOCI+Ci0gICAgPE5hbWU+PC9OYW1lPgotICAgIDxZYXJkYWdlPjwvWWFyZGFnZT4KLSAgICA8UGFyPjwvUGFyPgotICAgIDxIYW5kaWNhcD48L0hhbmRpY2FwPgotICAgIDxTbG9wZT48L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIgaGFuZGljYXA9IjAiLz4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICA8U2hhZnQ+PC9TaGFmdD4KLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMTIwNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlci8+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxNaWRkbGVOYW1lPjwvTWlkZGxlTmFtZT4KLSAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+PC9FbXBsb3llZU51bWJlcj4KLSAgPC9FbXBsb3llZT4KLSAgPFByb1Nob3A+Ci0gICAgPEdvbGZDbHViPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+PC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PjwvTG9mdD4KLSAgICAgIDxTaGFmdD48L1NoYWZ0PgotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHM+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxQcm9kdWN0RGV0YWlscz48L1Byb2R1Y3REZXRhaWxzPgotICAgIDwvQm94T2ZCYWxscz4KLSAgPC9Qcm9TaG9wPgotPC90bnM6R29sZkNvdW50cnlDbHViPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMjAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMjAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VhODllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyPgotICAgIDxSZXN0cmljdGVkTWVtYmVyPgotICAgICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgICAgPE1lbWJlcnNoaXBFeHBpcnk+PC9NZW1iZXJzaGlwRXhwaXJ5PgotICAgICAgPExpbWl0ZWRQbGF5PjwvTGltaXRlZFBsYXk+Ci0gICAgPC9SZXN0cmljdGVkTWVtYmVyPgotICA8L01lbWJlcj4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICA8U2hhZnQ+PC9TaGFmdD4KLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTMxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTMxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjMmFkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0zMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZSBOdW1iZXJPZkhvbGVzPSIxOCI+Ci0gICAgPE5hbWU+TmFtZTwvTmFtZT4KLSAgICA8WWFyZGFnZT4xPC9ZYXJkYWdlPgotICAgIDxQYXI+MTwvUGFyPgotICAgIDxIYW5kaWNhcD4wLjA8L0hhbmRpY2FwPgotICAgIDxTbG9wZT5TbG9wZTwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlciBoYW5kaWNhcD0iMCI+Ci0gICAgPFJlc3RyaWN0ZWRNZW1iZXI+Ci0gICAgICA8Rmlyc3ROYW1lPkZpcnN0TmFtZTwvRmlyc3ROYW1lPgotICAgICAgPE1pZGRsZU5hbWU+TWlkZGxlTmFtZTwvTWlkZGxlTmFtZT4KLSAgICAgIDxMYXN0TmFtZT5MYXN0TmFtZTwvTGFzdE5hbWU+Ci0gICAgICA8TWVtYmVyc2hpcEV4cGlyeT4yMDAxLTAxLTAxPC9NZW1iZXJzaGlwRXhwaXJ5PgotICAgICAgPExpbWl0ZWRQbGF5PldlZWtkYXkgT25seTwvTGltaXRlZFBsYXk+Ci0gICAgPC9SZXN0cmljdGVkTWVtYmVyPgotICA8L01lbWJlcj4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+Rmlyc3ROYW1lPC9GaXJzdE5hbWU+Ci0gICAgPE1pZGRsZU5hbWU+TWlkZGxlTmFtZTwvTWlkZGxlTmFtZT4KLSAgICA8TGFzdE5hbWU+TGFzdE5hbWU8L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj5FbXBsb3llZU51bWJlcjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPk1hbnVmYWN0dXJlck5hbWU8L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+MTwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+RHJpdmVyPC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PkxvZnQ8L0xvZnQ+Ci0gICAgICA8U2hhZnQ+UmVndWxhcjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPk1hbnVmYWN0dXJlck5hbWU8L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+MTwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+UHJvZHVjdERldGFpbHM8L1Byb2R1Y3REZXRhaWxzPgotICAgIDwvQm94T2ZCYWxscz4KLSAgPC9Qcm9TaG9wPgotPC90bnM6R29sZkNvdW50cnlDbHViPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItOC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi04LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1ZGRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi04LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPk5hbWU8L05hbWU+Ci0gICAgPFlhcmRhZ2U+MTwvWWFyZGFnZT4KLSAgICA8UGFyPjE8L1Bhcj4KLSAgICA8SGFuZGljYXA+MC4wPC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+U2xvcGU8L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIvPgotICA8RW1wbG95ZWU+Ci0gICAgPEZpcnN0TmFtZT5GaXJzdE5hbWU8L0ZpcnN0TmFtZT4KLSAgICA8TGFzdE5hbWU+TGFzdE5hbWU8L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj5FbXBsb3llZU51bWJlcjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPk1hbnVmYWN0dXJlck5hbWU8L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+MTwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+RHJpdmVyPC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PkxvZnQ8L0xvZnQ+Ci0gICAgICA8U2hhZnQ+UmVndWxhcjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPk1hbnVmYWN0dXJlck5hbWU8L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+MTwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+UHJvZHVjdERldGFpbHM8L1Byb2R1Y3REZXRhaWxzPgotICAgIDwvQm94T2ZCYWxscz4KLSAgPC9Qcm9TaG9wPgotPC90bnM6R29sZkNvdW50cnlDbHViPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMi1CaWxsSW5mby0zMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWEyLUJpbGxJbmZvLTMxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZhMjg3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWEyLUJpbGxJbmZvLTMxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6QmlsbEluZm8gYWNjb3VudFR5cGU9IiIgYW1tb3VudD0iMC4wIiBkYXRlPSIyMDAxLTAxLTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUGhvbmVCYW5raW5nIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUGhvbmVCYW5raW5nIFNjaGVtYTIueHNkICI+Ci0gIDx0bnM6cGF5ZWUgYWNjb3VudENvZGU9IiIgbmFtZT0iIi8+Ci08L3RuczpCaWxsSW5mbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjMwYmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG11bHRpLXJvb3QgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249ImludGVybmF0aW9uYWwueHNkIiB4bWxucz0iIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLQk8cm9vdD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC9yb290PgotCTzrv4zrpqzshLHrtoQ+67mg66W4IOqwiOyDiSDsl6zsmrDripQg6rKM7Jy866W4IOqwnOyXkCDqsJXtlZjtlZzri6Q8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwv5qC55YWD57SgPgotCTxyb290Pui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwvcm9vdD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukPC/moLnlhYPntKA+Ci08L211bHRpLXJvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMTNjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiPgotCi0JPCEtLTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIi8+LS0+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ibXVsdGktcm9vdCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJyb290IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSLrv4zrpqzshLHrtoQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IuagueWFg+e0oCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSLrv4zrpqzshLHrtoQiIHR5cGU9InByb3NlIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0i5qC55YWD57SgIiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwcm9zZSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9IlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciLz4KLQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0i6L+Z5Y+q5b+r5qOV6Imy54uQ54u46Lez6L+H5oeS5oOw54uXIi8+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9Iuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcvVGVzdDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE0NGQ4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcvVGVzdDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZvbwotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249IlRlc3QxU2NoZW1hLnhzZCI+Ci0JCi0JPGJhcj4KLQkJPCEtLSBUZXN0IC0tPgotCTwvYmFyPgotPC9mb28+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxU2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy9UZXN0MVNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYmUzOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxU2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJmb28iIHR5cGU9InhzZEZvbyIgLz4KLQkKLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ieHNkRm9vIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJiYXIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU5MTEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIj4KLQotICA8ZWxlbWVudCBuYW1lPSJHb2xmQ291bnRyeUNsdWIiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iR29sZkNvdXJzZSIgdHlwZT0idG5zOkdvbGZDb3Vyc2VUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9Ik1lbWJlciIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+Ci0gICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPGNob2ljZT4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVzdHJpY3RlZE1lbWJlciIgdHlwZT0idG5zOlJlc3RyaWN0ZWRNZW1iZXJUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlJlZ3VsYXJNZW1iZXIiIHR5cGU9InRuczpSZWd1bGFyTWVtYmVyVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJFeGNsdXNpdmVNZW1iZXIiIHR5cGU9InRuczpFeGNsdXNpdmVNZW1iZXJUeXBlIj4KLSAgICAgICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPkxpZmUtdGltZSBtZW1iZXI8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaGFuZGljYXAiIHR5cGU9Im5vbk5lZ2F0aXZlSW50ZWdlciI+PC9hdHRyaWJ1dGU+Ci0gICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJFbXBsb3llZSIgdHlwZT0idG5zOkVtcGxveWVlVHlwZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJQcm9TaG9wIj4KLSAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkdvbGZDbHViIiB0eXBlPSJ0bnM6R29sZkNsdWJUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkJveE9mQmFsbHMiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiIHR5cGU9InRuczpCb3hPZkJhbGxzVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gIDwvZWxlbWVudD4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUmVndWxhck1lbWJlclR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyc2hpcEV4cGlyeSIgdHlwZT0iZGF0ZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZkNsdWJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOkdvbGZNYW51ZmFjdHVyZXJUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkNsdWJLaW5kIiB0eXBlPSJ0bnM6Q2x1YktpbmRUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTG9mdCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iU2hhZnQiIHR5cGU9InRuczpTaGFmdFR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPHNpbXBsZVR5cGUgbmFtZT0iQ2x1YktpbmRUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXb29kIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJJcm9uIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXZWRnZSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUHV0dGVyIj48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJTaGFmdFR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGFyIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJTdGlmZiI+PC9lbnVtZXJhdGlvbj4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iR29sZkNsdWIiIHR5cGU9InRuczpHb2xmQ2x1YlR5cGUiPjwvZWxlbWVudD4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUGVyc29uVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iRmlyc3ROYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik1pZGRsZU5hbWUiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSIxIiBtaW5PY2N1cnM9IjAiPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ikxhc3ROYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8L3NlcXVlbmNlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJFbXBsb3llZVR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iRW1wbG95ZWVOdW1iZXIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZkNvdXJzZVR5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgIDxkb2N1bWVudGF0aW9uPk5hbWUgb2YgdGhlIGNvdXJzZTwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iWWFyZGFnZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQYXIiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iSGFuZGljYXAiPgotICAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0iZmxvYXQiPgotICAgICAgICAgICAgPG1pbkluY2x1c2l2ZSB2YWx1ZT0iMCI+PC9taW5JbmNsdXNpdmU+Ci0gICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iU2xvcGUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPGF0dHJpYnV0ZSBuYW1lPSJOdW1iZXJPZkhvbGVzIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiIGZpeGVkPSIxOCI+PC9hdHRyaWJ1dGU+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkdvbGZNYW51ZmFjdHVyZXJUeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICA8L3NlcXVlbmNlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJCb3hPZkJhbGxzVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6R29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUHJvZHVjdERldGFpbHMiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iRXhjbHVzaXZlTWVtYmVyVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJWYWxldFBhcmtpbmdJRCIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTG9ja2VyTnVtYmVyIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlJlc3RyaWN0ZWRNZW1iZXJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9Ik1lbWJlcnNoaXBFeHBpcnkiIHR5cGU9ImRhdGUiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMaW1pdGVkUGxheSIgdHlwZT0idG5zOkxpbWl0ZWRQbGF5VHlwZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJMaW1pdGVkUGxheVR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXZWVrZGF5IE9ubHkiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZWtlbmQgT25seSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iQW55dGltZSBhZnRlciB0d2lsaWdodCI+PC9lbnVtZXJhdGlvbj4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWEyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1ODM5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9QaG9uZUJhbmtpbmciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9QaG9uZUJhbmtpbmciIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICAgIDxlbGVtZW50IG5hbWU9IkFjY291bnRJbmZvIiB0eXBlPSJ0bnM6QWNjb3VudFR5cGUiPjwvZWxlbWVudD4KLSAgICAKLSAgICA8ZWxlbWVudCBuYW1lPSJQYXllZSIgdHlwZT0idG5zOlBheWVlIj48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGVsZW1lbnQgbmFtZT0iUGF5ZWVMaXN0IiB0eXBlPSJ0bnM6UGF5ZWVMaXN0Ij48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBheWVlTGlzdCI+Ci0gICAgCTxzZXF1ZW5jZT4KLSAgICAJCTxlbGVtZW50IG5hbWU9InBheWVlIiB0eXBlPSJ0bnM6UGF5ZWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBheWVlIj4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImFjY291bnRDb2RlIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJBY2NvdW50U3VtbWFyeSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJDb21wbGV0aW9uQ29kZSIgdHlwZT0idG5zOkNvbXBsZXRpb25Db2RlIj48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGVsZW1lbnQgbmFtZT0iVmVyaWZpY2F0aW9uQ29kZSIgdHlwZT0idG5zOlZlcmlmaWNhdGlvbkNvZGUiPjwvZWxlbWVudD4KLSAgICAKLSAgICA8ZWxlbWVudCBuYW1lPSJCaWxsSW5mbyIgdHlwZT0idG5zOkJpbGxJbmZvIj48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFjY291bnRUeXBlIj4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImFjY291bnRJZCIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlZlcmlmaWNhdGlvbkNvZGUiPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImNvbXBsZXRlZCIgdHlwZT0iYm9vbGVhbiI+PC9hdHRyaWJ1dGU+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iY29kZSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbXBsZXRpb25Db2RlIj4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJjb21wbGV0ZWQiIHR5cGU9ImJvb2xlYW4iPjwvYXR0cmlidXRlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iQmlsbEluZm8iPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJwYXllZSIgdHlwZT0idG5zOlBheWVlIj48L2VsZW1lbnQ+Ci0gICAgCTwvc2VxdWVuY2U+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iYW1tb3VudCIgdHlwZT0iZG91YmxlIj48L2F0dHJpYnV0ZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJhY2NvdW50VHlwZSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJkYXRlIiB0eXBlPSJkYXRlIj48L2F0dHJpYnV0ZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURC9zaW1wbGUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RWYWxpZGF0ZUFnYWluc3REVEQvc2ltcGxlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyYjkwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURC9zaW1wbGUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08IUVMRU1FTlQgbWFpbiAobm90bWFpbikrPgotPCFFTEVNRU5UIG5vdG1haW4gKCNQQ0RBVEEpPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0VmFsaWRhdGVBZ2FpbnN0RFREL3NpbXBsZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURC9zaW1wbGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2VlNDlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0VmFsaWRhdGVBZ2FpbnN0RFREL3NpbXBsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInNpbXBsZS5kdGQiID4KLTxtYWluIC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvU2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC9TY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU5MTEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC9TY2hlbWExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiPgotCi0gIDxlbGVtZW50IG5hbWU9IkdvbGZDb3VudHJ5Q2x1YiI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJHb2xmQ291cnNlIiB0eXBlPSJ0bnM6R29sZkNvdXJzZVR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj4KLSAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJSZXN0cmljdGVkTWVtYmVyIiB0eXBlPSJ0bnM6UmVzdHJpY3RlZE1lbWJlclR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVndWxhck1lbWJlciIgdHlwZT0idG5zOlJlZ3VsYXJNZW1iZXJUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkV4Y2x1c2l2ZU1lbWJlciIgdHlwZT0idG5zOkV4Y2x1c2l2ZU1lbWJlclR5cGUiPgotICAgICAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+TGlmZS10aW1lIG1lbWJlcjwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJoYW5kaWNhcCIgdHlwZT0ibm9uTmVnYXRpdmVJbnRlZ2VyIj48L2F0dHJpYnV0ZT4KLSAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9IkVtcGxveWVlIiB0eXBlPSJ0bnM6RW1wbG95ZWVUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9IlByb1Nob3AiPgotICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iR29sZkNsdWIiIHR5cGU9InRuczpHb2xmQ2x1YlR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQm94T2ZCYWxscyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSIgdHlwZT0idG5zOkJveE9mQmFsbHNUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIDwvZWxlbWVudD4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgPC9lbGVtZW50PgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJSZWd1bGFyTWVtYmVyVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJNZW1iZXJzaGlwRXhwaXJ5IiB0eXBlPSJkYXRlIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJHb2xmQ2x1YlR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLQotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6R29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQ2x1YktpbmQiIHR5cGU9InRuczpDbHViS2luZFR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMb2Z0IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJTaGFmdCIgdHlwZT0idG5zOlNoYWZ0VHlwZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJDbHViS2luZFR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXIiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ildvb2QiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Iklyb24iPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZGdlIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQdXR0ZXIiPjwvZW51bWVyYXRpb24+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotCi0gIDxzaW1wbGVUeXBlIG5hbWU9IlNoYWZ0VHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlJlZ3VsYXIiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlN0aWZmIj48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJHb2xmQ2x1YiIgdHlwZT0idG5zOkdvbGZDbHViVHlwZSI+PC9lbGVtZW50PgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJQZXJzb25UeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJGaXJzdE5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iTWlkZGxlTmFtZSIgdHlwZT0ic3RyaW5nIiBtYXhPY2N1cnM9IjEiIG1pbk9jY3Vycz0iMCI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iTGFzdE5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkVtcGxveWVlVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJFbXBsb3llZU51bWJlciIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJHb2xmQ291cnNlVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgPGRvY3VtZW50YXRpb24+TmFtZSBvZiB0aGUgY291cnNlPC9kb2N1bWVudGF0aW9uPgotICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJZYXJkYWdlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlBhciIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJIYW5kaWNhcCI+Ci0gICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJmbG9hdCI+Ci0gICAgICAgICAgICA8bWluSW5jbHVzaXZlIHZhbHVlPSIwIj48L21pbkluY2x1c2l2ZT4KLSAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJTbG9wZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgICA8YXR0cmlidXRlIG5hbWU9Ik51bWJlck9mSG9sZXMiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIgZml4ZWQ9IjE4Ij48L2F0dHJpYnV0ZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlck5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iUXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkJveE9mQmFsbHNUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpHb2xmTWFudWZhY3R1cmVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJQcm9kdWN0RGV0YWlscyIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJFeGNsdXNpdmVNZW1iZXJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlZhbGV0UGFya2luZ0lEIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMb2NrZXJOdW1iZXIiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZE1lbWJlclR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyc2hpcEV4cGlyeSIgdHlwZT0iZGF0ZSI+PC9lbGVtZW50PgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkxpbWl0ZWRQbGF5IiB0eXBlPSJ0bnM6TGltaXRlZFBsYXlUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxzaW1wbGVUeXBlIG5hbWU9IkxpbWl0ZWRQbGF5VHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZWtkYXkgT25seSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iV2Vla2VuZCBPbmx5Ij48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBbnl0aW1lIGFmdGVyIHR3aWxpZ2h0Ij48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZmNTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgICAKLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyID4KLSAgCSAgIAkKLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZSA+Ci0gICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+PC9FbXBsb3llZU51bWJlcj4KLSAgPC9FbXBsb3llZT4KLSAgPFByb1Nob3A+Ci0gICAgPEdvbGZDbHViPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+PC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PjwvTG9mdD4KLSAgICAgIAotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHMgPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NmJlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT48L0dvbAotICAKLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YTUxGb2xkaW5nQ29tbWVudFRlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ0NvbW1lbnRUZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjNWFiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YTUxGb2xkaW5nQ29tbWVudFRlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCTxmb28xPjwvZm9vMT4KLQkKLQk8IS0tIE15IEF3ZXNvbWUgY29tbWVudCEhISEgLS0+Ci0JCi0JPGZvbzI+Ci0JCTxiYXIxPjwvYmFyMT4KLQkJPGJhcjIgb25lPSIxIgotCQl0d289IjIiCi0JCXRocmVlPSIzIj4KLQkJCi0JCTwvYmFyMj4KLQkJCi0JCTxiYXIzPgotCQkKLQkJPCEtLSAKLQkJCi0JCQotCQkJTXkgQXdlc29tZSBjb21tZW50ISEhIQotCQkJCi0JCQkKLQkJCQotCQkgLS0+Ci0JCQotCQk8L2JhcjM+Ci0JCi0JPC9mb28yPgotCQotCTwhLS0gCi0JCU15IEF3ZXNvbWUgY29tbWVudCEhISEKLQkgLS0+Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YTUxGb2xkaW5nVGVzdDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ1Rlc3QxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4YTMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YTUxGb2xkaW5nVGVzdDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cm9vdD4NCi0JPGZvbzE+PC9mb28xPg0KLQk8Zm9vMj4NCi0JCTxiYXIxPjwvYmFyMT4NCi0JCTxiYXIyIG9uZT0iMSINCi0JCXR3bz0iMiINCi0JCXRocmVlPSIzIj4NCi0JCQ0KLQkJPC9iYXIyPg0KLQkJDQotCQk8YmFyMz4NCi0JCTwvYmFyMz4NCi0JDQotCTwvZm9vMj4NCi0JDQotCTwhLS0gDQotCQlNeSBBd2Vzb21lIGNvbW1lbnQhISEhDQotCSAtLT4NCi0NCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ1Rlc3QyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hNTEZvbGRpbmdUZXN0Mi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OGEzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ1Rlc3QyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHJvb3Q+DQotCTxmb28xPjwvZm9vMT4NCi0JPGZvbzI+DQotCQk8YmFyMT48L2JhcjE+DQotCQk8YmFyMiBvbmU9IjEiDQotCQl0d289IjIiDQotCQl0aHJlZT0iMyI+DQotCQkNCi0JCTwvYmFyMj4NCi0JCQ0KLQkJPGJhcjM+DQotCQk8L2JhcjM+DQotCQ0KLQk8L2ZvbzI+DQotCQ0KLQk8IS0tIA0KLQkJTXkgQXdlc29tZSBjb21tZW50ISEhIQ0KLQkgLS0+DQotDQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hTTEZvbGRpbmdUZXN0MS54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YU0xGb2xkaW5nVGVzdDEueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmQ0YmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hTTEZvbGRpbmdUZXN0MS54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTwhLS0gCi0JCQlUT0RPOiBBdXRvLWdlbmVyYXRlZCB0ZW1wbGF0ZQotCQktLT4KLQk8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NwZWxsY2hlY2svc3BlbGxjaGVja19jb21tZW50X2VsZW1lbnQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NwZWxsY2hlY2svc3BlbGxjaGVja19jb21tZW50X2VsZW1lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjk2MzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9zcGVsbGNoZWNrL3NwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCTwhLS0kZm9vIGJhciBiYXogIC0tPgotCi0JPCEtLSBTcGVsbCBjaGVjayBtZTogZm9vIGJheiAtLT4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMveG1sQ29udGVudEFzc2lzdC10ZXN0MS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMveG1sQ29udGVudEFzc2lzdC10ZXN0MS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTVjZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3htbENvbnRlbnRBc3Npc3QtdGVzdDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2U+Ci0gICAgPE5hbWU+PC9OYW1lPgotICAgIDxZYXJkYWdlPjwvWWFyZGFnZT4KLSAgICA8UGFyPjwvUGFyPgotICAgIDxIYW5kaWNhcD48L0hhbmRpY2FwPgotICAgIDxTbG9wZT48L1Nsb3BlPgotICAgIAotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIgPgotICAJICAgCQotICA8L01lbWJlcj4KLSAgPEVtcGxveWVlID4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgCi0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscyA+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxQcm9kdWN0RGV0YWlscz48L1Byb2R1Y3REZXRhaWxzPgotICAgIDwvQm94T2ZCYWxscz4KLSAgPC9Qcm9TaG9wPgotPC90bnM6R29sZkNvdW50cnlDbHViPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlOTRhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi12YWxpZGF0ZXhtbHRlc3RzLmphcgotamF2YUNvbXBpbGVyLnZhbGlkYXRleG1sdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyNTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Zjk5NDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNjAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4bWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYjBiMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB2YWxpZGF0ZXhtbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc291cmNlLnZhbGlkYXRleG1sdGVzdHMuamFyID0gc3JjLwotYmluLmV4Y2x1ZGVzID0gdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOTU4NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYTUwgVmFsaWRhdG9yIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzZTA1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0JCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQljb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldFdhcm5Ob0dyYW1tYXJGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRXYXJuTm9HcmFtbWFyRmVhdHVyZVRydWUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgdHJ1ZSk7Ci0JICBhc3NlcnRUcnVlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCB0byB0cnVlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBXQVJOX05PX0dSQU1NQVIgdG8gdHJ1ZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0V2Fybk5vR3JhbW1hckZlYXR1cmVGYWxzZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCBmYWxzZSk7Ci0JICBhc3NlcnRGYWxzZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUikpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IFdBUk5fTk9fR1JBTU1BUiB0byBmYWxzZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIiwgZmFsc2UpOwotCSAgZmFpbCgiU2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgZ2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIik7Ci0JICBmYWlsKCJHZXR0aW5nIGEgbm9uIGV4aXN0YW50IGZlYXR1cmUgZGlkIG5vdCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgLy8gVGhlIHRlc3Qgc3VjY2VlZHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQuCi0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmRpY2F0ZU5vR3JhbW1hckZlYXR1cmVEZWZhdWx0KCkKLSAgewotCXRyeQotCXsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgSU5ESUNBVEVfTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCB0byBJZ25vcmUuIiwgMSwgY29uZmlndXJhdGlvbi5nZXRJbnRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLklORElDQVRFX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTk3MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlhNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gIkVsZW1lbnRVbnRlcm1pbmF0ZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbGVtZW50VW50ZXJtaW5hdGVkIiwgbnVsbCk7Ci0JTWVzc2FnZSBtZXNzYWdlMiA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UyLCBtZXNzYWdlMik7Ci0JYXNzZXJ0RXF1YWxzKCJDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSB3YXMgY29ycmVjdGx5IHNldCB0byAxIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBFTlRJUkVfRUxFTUVOVC4gQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbmV3IEludGVnZXIoMSksIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSB3YXMgbm90IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIkVOVElSRV9FTEVNRU5UIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLQkKLSAgICAvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHRocmVlIGF0dHJpYnV0ZXMgd2hlbiB0aGUga2V5IGlzIHNldCB0byAiRW50aXR5Tm90RGVjbGFyZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbnRpdHlOb3REZWNsYXJlZCIsIG5ldyBPYmplY3RbXXsiTXlOYW1lIn0pOwotCU1lc3NhZ2UgbWVzc2FnZTMgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMywgbWVzc2FnZTMpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBURVhUX0VOVElUWV9SRUZFUkVOQ0UuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVEVYVF9FTlRJVFlfUkVGRVJFTkNFIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3Qgc2V0IHRvIE15TmFtZSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksICJNeU5hbWUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4gVGVzdHMgdG8gYmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuPGJyLz4KLSAgICogMi4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbnVsbCk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBudWxsKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyByZWFkIGZyb20gdGhlIFhNTCBjb3JlIHByZWZlcmVuY2VzLgotICAgKiBUaGVyZSBhcmUgdGhyZWUgdGVzdHMgdG8gcGVyZm9ybS4KLSAgICogMS4gVGVzdCB0aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgaXMgZW5hYmxlZC4KLSAgICogMi4gVGVzdCB0aGF0IHNldHRpbmcgdGhlIHByZWZlcmVuY2UgdG8gZGlzYWJsZWQgd29ya3MuCi0gICAqIDMuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGVuYWJsZWQgd29ya3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V2Fybk5vR3JhbW1hclByZWZlcmVuY2UoKQotICB7Ci0JLy8gVGVzdCB0aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgaXMgZGlzYWJsZWQuCi0JdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihudWxsKTsKLQlhc3NlcnROb3RTYW1lKCJUaGUgZGVmYXVsdCB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgZW5hYmxlZC4iLCBuZXcgSW50ZWdlcigwKSwgbmV3IEludGVnZXIodmFsaWRhdG9yLmdldEluZGljYXRlTm9HcmFtbWFyUHJlZmVyZW5jZSgpKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBwcmVmZXJlbmNlIGlzIHJlYWQgd2hlbiBkaXNhYmxlZC4KLQlYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ESUNBVEVfTk9fR1JBTU1BUiwgMCk7Ci0JdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgaWdub3JlIHdoZW4gdGhlIHByZWZlcmVuY2UgaXMgc2V0IHRvIGlnbm9yZS4iLCAwLCB2YWxpZGF0b3IuZ2V0SW5kaWNhdGVOb0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCi0JLy8gVGVzdCB0aGF0IHRoZSBwcmVmZXJlbmNlIGlzIHJlYWQgd2hlbiBlbmFibGVkLgotCVhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRJQ0FURV9OT19HUkFNTUFSLCAyKTsKLQl2YWxpZGF0b3Iuc2V0dXBWYWxpZGF0aW9uKG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlIGlzIG5vdCBlcnJvciB3aGVuIHRoZSBwcmVmZXJlbmNlIGlzIHNldCB0byBlcnJvci4iLCAyLCB2YWxpZGF0b3IuZ2V0SW5kaWNhdGVOb0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDc2Y2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB2YWxpZGF0b3IgdG8gZXhwb3NlIHRoZSBwcm90ZWN0ZWQgbWV0aG9kcwotICogZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI3NldHVwVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXR1cFZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCXN1cGVyLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0vKioKLSAgICogRXhwb3J0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRJbmRpY2F0ZU5vR3JhbW1hclByZWZlcmVuY2UoKQotICB7Ci0JcmV0dXJuIGluZGljYXRlTm9HcmFtbWFyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYmYzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCBjYXNlIHRvIHRlc3QgdGhlIFhNTE1lc3NhZ2VJbmZvSGVscGVyIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIHByaXZhdGUgWE1MTWVzc2FnZUluZm9IZWxwZXIgaGVscGVyID0gbmV3IFhNTE1lc3NhZ2VJbmZvSGVscGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBjcmVhdGVNZXNzYWdlSW5mbyBtZXRob2QgcmV0dXJucyB7IiIsIG51bGx9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuZCBudWxsIG1lc3NhZ2UgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vdEV4aXN0YW50S2V5QW5kTnVsbE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8oIk5PTl9FWElTVEFOVF9LRVkiLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBzZWxlY3Rpb24gc3RyYXRlZ3kgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzBdKTsKLQlhc3NlcnROdWxsKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBudWxsLiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCBudWxsfSB3aGVuCi0gICAqIGdpdmVuIGEgbm9uLWV4aXN0YW50IGtleSBhbmQgbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROdWxsS2V5QW5kTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbyhudWxsLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBzZWxlY3Rpb24gc3RyYXRlZ3kgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzBdKTsKLQlhc3NlcnROdWxsKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBudWxsLiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwNTVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgRWNsaXBzZSBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYTUxWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdG8gZW5zdXJlIHRoZSBVUkkgcmVzb2x2ZXIgaXMgbm90IG51bGwgaW4gdGhlIEVjbGlwc2UKLSAgICogc3BlY2lmaWMgWE1MIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVUklSZXNvbHZlcklzUmVnaXN0ZXJlZCgpCi0gIHsKLQlYTUxWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBYTUxWYWxpZGF0b3JXcmFwcGVyKCk7Ci0JYXNzZXJ0Tm90TnVsbCgiVGhlIFVSSSByZXNvbHZlciBpcyBudWxsLiIsIHZhbGlkYXRvci5nZXRVUklSZXNvbHZlcigpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUxYTA5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBYTUwgdmFsaWRhdG9yIGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFhNTFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhNTFZhbGlkYXRvcldyYXBwZXIoKQotICB7Ci0Jc3VwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpUmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjQ1ZDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlci5FcnJvck1lc3NhZ2VJbmZvcm1hdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci0KLS8qKgotICogVGVzdCB0aGUgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0JCi0gIC8qKgotICAgKiBUZXN0IHRoZSBzdGFydEVsZW1lbnQgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IHRoZSByb290IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjay4KLSAgICogMi4gVGVzdCB0aGF0IGEgc3Vic2VxdWVudCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2sgYW5kCi0gICAqICAgIHJlZ2lzdGVyZWQgYXMgYSBjaGlsZCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0RWxlbWVudCgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgdGhlIHJvb3QgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrLgotCVN0cmluZyBuYW1lc3BhY2UxID0gImh0dHA6Ly9uYW1lc3BhY2UxIjsKLQlTdHJpbmcgbG9jYWxuYW1lMSA9ICJsb2NhbG5hbWUiOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGlzIG5vdCBlbXB0eSB0byBzdGFydC4iLCAwLCBtYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQltYW5hZ2VyLnN0YXJ0RWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKTsKLQlFbGVtZW50SW5mb3JtYXRpb24gZWxlbUluZm8gPSAoRWxlbWVudEluZm9ybWF0aW9uKW1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wb3AoKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGlzIG5vdCBlbXB0eSB0byBhZnRlciBwb3BwaW5nIHRoZSB0b3AgZWxlbWVudC4iLCAwLCBtYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm8uZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvLmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgbG9jYWxuYW1lIGl0IGlzICIgKyBlbGVtSW5mby5nZXRMb2NhbG5hbWUoKSwgbG9jYWxuYW1lMSwgZWxlbUluZm8uZ2V0TG9jYWxuYW1lKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIHN1YnNlcXVlbnQgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrIGFuZCByZWdpc3RlcmVkIGFzIGEgY2hpbGQgZWxlbWVudC4KLQlTdHJpbmcgbG9jYWxuYW1lMiA9ICJsb2NhbG5hbWUyIjsKLSAgICBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMiA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgaXMgbm90IGVtcHR5IHRvIHN0YXJ0LiIsIDAsIG1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQltYW5hZ2VyMi5zdGFydEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMSk7Ci0JbWFuYWdlcjIuc3RhcnRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTIpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgZG9lcyBub3QgY29udGFpbiAyIGVsZW1lbnRzLiIsIDIsIG1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQlFbGVtZW50SW5mb3JtYXRpb24gZWxlbUluZm8yID0gKEVsZW1lbnRJbmZvcm1hdGlvbiltYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnBvcCgpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgZG9lcyBub3QgY29udGFpbiAxIGVsZW1lbnQgYWZ0ZXIgcG9wcGluZyB0aGUgdG9wIGVsZW1lbnQuIiwgMSwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gY2hpbGQgaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mbzIuZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvMi5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gY2hpbGQgaXMgbm90IGxvY2FsbmFtZTIgaXQgaXMgIiArIGVsZW1JbmZvMi5nZXRMb2NhbG5hbWUoKSwgbG9jYWxuYW1lMiwgZWxlbUluZm8yLmdldExvY2FsbmFtZSgpKTsKLQlFbGVtZW50SW5mb3JtYXRpb24gZWxlbUluZm8zID0gKEVsZW1lbnRJbmZvcm1hdGlvbiltYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnBvcCgpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgZG9lcyBub3QgY29udGFpbiAwIGVsZW1lbnRzIGFmdGVyIHBvcHBpbmcgdGhlIHRvcCBlbGVtZW50LiIsIDAsIG1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm8zLmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mbzMuZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGlzIG5vdCBsb2NhbG5hbWUgaXQgaXMgIiArIGVsZW1JbmZvMy5nZXRMb2NhbG5hbWUoKSwgbG9jYWxuYW1lMSwgZWxlbUluZm8zLmdldExvY2FsbmFtZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGRvZXMgbm90IGNvbnRhaW4gMSBjaGlsZCBlbGVtZW50IGl0IGNvbnRhaW5zICIgKyBlbGVtSW5mbzMuZ2V0Q2hpbGRyZW4oKS5zaXplKCksIDEsIGVsZW1JbmZvMy5nZXRDaGlsZHJlbigpLnNpemUoKSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvNCA9IChFbGVtZW50SW5mb3JtYXRpb24pZWxlbUluZm8zLmdldENoaWxkcmVuKCkuZ2V0KDApOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24ncyBjaGlsZCBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvNC5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm80LmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbidzIGNoaWxkIGlzIG5vdCBsb2NhbG5hbWUyIGl0IGlzICIgKyBlbGVtSW5mbzQuZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTIsIGVsZW1JbmZvNC5nZXRMb2NhbG5hbWUoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBlbmRFbGVtZW50IG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIENoZWNrIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvbiB0aGUgc3RhY2sgaXMgc3VjY2Vzc2Z1bGx5IHBvcHBlZC4KLSAgICogMi4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHByb2R1Y2VzIHRoZSBleHBlY3RlZCBtZXNzYWdlLgotICAgKiAzLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBub3QgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHJldGFpbnMgaXRzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVuZEVsZW1lbnQoKQotICB7Ci0JLy8gMS4gQ2hlY2sgdGhhdCB0aGUgbGFzdCBlbGVtZW50IG9uIHRoZSBzdGFjayBpcyBzdWNjZXNzZnVsbHkgcG9wcGVkLgotCVN0cmluZyBuYW1lc3BhY2UxID0gImh0dHA6Ly9uYW1lc3BhY2UxIjsKLSAgICBTdHJpbmcgbG9jYWxuYW1lMSA9ICJsb2NhbG5hbWUiOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQltYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucHVzaChuZXcgRWxlbWVudEluZm9ybWF0aW9uKG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpKTsKLQltYW5hZ2VyLmVuZEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMSk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgc3RhY2sgc3RpbGwgY29udGFpbnMgYW4gZWxlbWVudC4iLCAwLCBtYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcHJvZHVjZXMgdGhlIGV4cGVjdGVkIG1lc3NhZ2UuCi0JU3RyaW5nIG5hbWVzcGFjZTIgPSAiWE1MVmFsaWRhdGlvblRlc3RTYW1wbGVOYW1lc3BhY2UiOwotCUVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihuYW1lc3BhY2UyLCBuZXcgU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpKTsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMiA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCW1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucHVzaChuZXcgRWxlbWVudEluZm9ybWF0aW9uKG5hbWVzcGFjZTIsIGxvY2FsbmFtZTEpKTsKLQlFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBlbWkgPSBtYW5hZ2VyMi5uZXcgRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24oKTsKLQllbWkubWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiU2FtcGxlTWVzc2FnZSIsIDEsIDIsIG5hbWVzcGFjZTIpOwotCW1hbmFnZXIyLnNldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKGVtaSk7Ci0JbWFuYWdlcjIuZW5kRWxlbWVudChuYW1lc3BhY2UyLCBsb2NhbG5hbWUxKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBtZXNzYWdlIHdhcyBub3QgY3VzdG9taXplZCB0byBBQUFBLiBUaGUgbWVzc2FnZSBpcyAiICsgZW1pLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpLCAiQUFBQSIsIGVtaS5tZXNzYWdlLmdldE1lc3NhZ2UoKSk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgbm90IGluIGEgc2FtcGxlIG5hbWVzcGFjZSByZXRhaW5zIGl0cyB2YWx1ZS4KLQlTdHJpbmcgbmFtZXNwYWNlMyA9ICJYTUxWYWxpZGF0aW9uVGVzdFNhbXBsZU5hbWVzcGFjZTMiOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIzID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JbWFuYWdlcjMuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wdXNoKG5ldyBFbGVtZW50SW5mb3JtYXRpb24obmFtZXNwYWNlMywgbG9jYWxuYW1lMSkpOwotCUVycm9yTWVzc2FnZUluZm9ybWF0aW9uIGVtaTIgPSBtYW5hZ2VyMy5uZXcgRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24oKTsKLQllbWkyLm1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIlNhbXBsZU1lc3NhZ2UiLCAxLCAyLCBuYW1lc3BhY2UzKTsKLQltYW5hZ2VyMy5zZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbihlbWkyKTsKLQltYW5hZ2VyMy5lbmRFbGVtZW50KG5hbWVzcGFjZTMsIGxvY2FsbmFtZTEpOwotCWFzc2VydEVxdWFscygiMy4gVGhlIG1lc3NhZ2UgZGlkIG5vdCByZXRhaW4gaXRzIHZhbHVlIG9mIFNhbXBsZU1lc3NhZ2UuIFRoZSBtZXNzYWdlIGlzICIgKyBlbWkyLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpLCAiU2FtcGxlTWVzc2FnZSIsIGVtaTIubWVzc2FnZS5nZXRNZXNzYWdlKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgY29uc2lkZXJSZXBvcnRlZEVycm9yIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG5vdCBzZXQgaWYgdGhlcmUgYXJlIG5vIGN1cnJlbnQKLSAgICogICAgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogMi4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgc2V0IGNvcnJlY3RseSBpZiB0aGVyZSBpcyBhCi0gICAqICAgIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb25zaWRlclJlcG9ydGVkRXJyb3IoKQotICB7Ci0JLy8gMS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbm90IHNldCBpZiB0aGVyZSBhcmUgbm8gY3VycmVudCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotCVN0cmluZyBuYW1lc3BhY2UxID0gImh0dHA6Ly9uYW1lc3BhY2UxIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JVmFsaWRhdGlvbkluZm8gdmFsaW5mbyA9IG5ldyBWYWxpZGF0aW9uSW5mbyhuYW1lc3BhY2UxKTsKLQltYW5hZ2VyLmNvbnNpZGVyUmVwb3J0ZWRFcnJvcih2YWxpbmZvLCAia2V5IiwgbnVsbCk7Ci0JYXNzZXJ0TnVsbCgiMS4gVGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG5vdCBudWxsIHdoZW4gbm8gdmFsaWRhdGlvbiBtZXNzYWdlcyBleGlzdC4iLCBtYW5hZ2VyLmdldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKCkpOwotCQotCS8vIDIuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIHNldCBjb3JyZWN0bHkgaWYgdGhlcmUgaXMgYSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlWYWxpZGF0aW9uSW5mbyB2YWxpbmZvMiA9IG5ldyBWYWxpZGF0aW9uSW5mbyhuYW1lc3BhY2UxKTsKLQl2YWxpbmZvMi5hZGRFcnJvcigibWVzc2FnZSIsIDEsIDEsIG5hbWVzcGFjZTEpOwotCW1hbmFnZXIyLmNvbnNpZGVyUmVwb3J0ZWRFcnJvcih2YWxpbmZvMiwgImtleSIsIG51bGwpOwotCWFzc2VydE5vdE51bGwoIjIuIFRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBudWxsIHdoZW4gYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZXhpc3RzLiIsIG1hbmFnZXIyLmdldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IGFuIGVycm9yIGN1c3RvbWl6ZXIgaXMgb25seSBjYWxsZWQgZm9yIHRoZQotICAgKiBjb3JyZWN0IGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQoKQotICB7Ci0JICBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciB0ZXN0Q3VzdG9taXplciA9IG5ldyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpCi0JICB7Ci0JCSAgcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywgU3RyaW5nIGtleSwgT2JqZWN0W10gYXJndW1lbnRzKQotCQkgIHsKLQkJCSAgaWYoZWxlbWVudEluZm8uZ2V0TG9jYWxuYW1lKCkuZXF1YWxzKCJjaGlsZDEiKSkKLQkJCSAgewotCQkJCSAgZmFpbCgiQW4gZXJyb3Igd2FzIHJlcG9ydGVkIGZvciB0aGUgY2hpbGQxIGVsZW1lbnQuIik7Ci0JCQkgIH0KLQkJCSAgcmV0dXJuIG51bGw7Ci0JCSAgfQotCSAgfTsKLQkgIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIiwgdGVzdEN1c3RvbWl6ZXIpOwotCSAgdHJ5Ci0JICB7Ci0JCSAgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luTG9jYXRpb24oKS50b1N0cmluZygpICsgIi8iOwotCQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwiOwotCQkgIAotCQkgIFhNTFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgWE1MVmFsaWRhdG9yKCk7Ci0JCSAgdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotCQkgIHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLQkgIH0KLQkgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0JICB7Ci0JCSAgZmFpbCgiQW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlIHJ1bm5pbmcgdGhlIHRlc3Q6IiArIGUpOwotCSAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgyMDJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLS8qKgotICogQSB3cmFwcGVyIGZvciBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyIHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIGV4dGVuZHMgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlciAKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjay4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjay4KLSAgICovCi0gIHB1YmxpYyBTdGFjayBnZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpCi0gIHsKLQlyZXR1cm4gZWxlbWVudEluZm9ybWF0aW9uU3RhY2s7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgY3VycmVudCBtZXNzYWdlIGZvciBjb25zaWRlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZUluZm9ybWF0aW9uIGdldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKCkKLSAgewotCXJldHVybiBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgY3VycmVudCBtZXNzYWdlIGZvciBjb25zaWRlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogCQlUaGUgY3VycmVudCBtZXNzYWdlIGZvciBjb25zaWRlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gbWVzc2FnZSkKLSAgewotCW1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uID0gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIwMzQxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIHByaXZhdGUgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBudWxsOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlyZWdpc3RyeSA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIoKTsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhlIEFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJUb1JlZ2lzdHJ5IG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCBhZGRpbmcgYW4gZXJyb3IgY3VzdG9taXplciBmb3IgYSBuYW1lc3BhY2UgaXMgc3VjY2Vzc2Z1bC4KLSAgICogMi4gVGVzdCB0aGF0IGFkZGluZyB0d28gZXJyb3IgY3VzdG9taXplcnMgZm9yIGEgbmFtZXNwYWNlIHJldHVybnMgYm90aCBjdXN0b21pemVycy4KLSAgICogMy4gVGVzdCB0aGF0IGFkZGluZyBhbiBlbnRyeSB3aXRoIGEgbnVsbCBuYW1lc3BhY2UgYWRkcyB0aGUgZW50cnkgZm9yIHRoZSBlbXB0eSBzdHJpbmcKLSAgICogICAgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJUb1JlZ2lzdHJ5KCkKLSAgewotICAgIC8vIDEuIFRlc3QgdGhhdCBhZGRpbmcgYW4gZXJyb3IgY3VzdG9taXplciBmb3IgYSBuYW1lc3BhY2UgaXMgc3VjY2Vzc2Z1bC4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0JSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgY3VzdG9taXplciA9IG5ldyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpewotICAgICAgcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIAotICAgICAgewotICAgICAgICAvLyBUaGlzIHN0dWIgZm9yIHRlc3RpbmcgZG9lcyBub3QgcmVxdWlyZSBhbiBpbXBsZW1lbnRhdGlvbi4KLQkJcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfTsKLSAgICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG5hbWVzcGFjZTEsIGN1c3RvbWl6ZXIpOwotICAgIElFcnJvck1lc3NhZ2VDdXN0b21pemVyW10gcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMobmFtZXNwYWNlMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxLiBUaGVyZSBzaG91bGQgb25seSBiZSAxIGN1c3RvbWl6ZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZSBidXQgdGhlcmUgYXJlICIgKyByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoLCAxLCByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEuIFRoZSBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplciwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzBdKTsKLSAgICAKLSAgICAvLyAyLiBUZXN0IHRoYXQgYWRkaW5nIHR3byBlcnJvciBjdXN0b21pemVycyBmb3IgYSBuYW1lc3BhY2UgcmV0dXJucyBib3RoIGN1c3RvbWl6ZXJzLgotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyIGN1c3RvbWl6ZXIyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCl7Ci0gICAgICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgCi0gICAgICB7Ci0gICAgICAgIC8vIFRoaXMgc3R1YiBmb3IgdGVzdGluZyBkb2VzIG5vdCByZXF1aXJlIGFuIGltcGxlbWVudGF0aW9uLgotCQlyZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9OwotICAgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobmFtZXNwYWNlMSwgY3VzdG9taXplcjIpOwotICAgIHJlZ2lzdGVyZWRDdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKG5hbWVzcGFjZTEpOwotICAgIGFzc2VydEVxdWFscygiMi4gVGhlcmUgc2hvdWxkIGJlIDIgY3VzdG9taXplcnMgcmVnaXN0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZSBidXQgdGhlcmUgYXJlICIgKyByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoLCAyLCByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjIuIFRoZSBmaXJzdCBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplciwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoIjIuIFRoZSBzZWNvbmQgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMV0pOwotICAgIAotICAgIC8vIDMuIFRlc3QgdGhhdCBhZGRpbmcgYW4gZW50cnkgd2l0aCBhIG51bGwgbmFtZXNwYWNlIGFkZHMgdGhlIGVudHJ5IGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZS4KLSAgICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG51bGwsIGN1c3RvbWl6ZXIpOwotICAgIHJlZ2lzdGVyZWRDdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKCIiKTsKLSAgICBhc3NlcnRFcXVhbHMoIjMuIFRoZXJlIHNob3VsZCBiZSAxIGN1c3RvbWl6ZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UgYnV0IHRoZXJlIGFyZSAiICsgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCwgMSwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIzLiBUaGUgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1swXSk7Ci0gIH0KLQkKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGdldEN1c3RvbWl6ZXJzIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIGEgbmFtZXNwYWNlIHRoYXQgaGFzIG5vdCBiZWVuCi0gICAqICAgIHJlZ2lzdGVyZWQgcHJvZHVjZXMgYW4gZW1wdHkgYXJyYXkuCi0gICAqIDIuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSByZXR1cm5zIHRoZQotICAgKiAgICBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyLgotICAgKiAzLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZSByZXR1cm5zCi0gICAqICAgIHRoZSBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldEN1c3RvbWl6ZXJzKCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgbGlzdCBmb3IgYSBuYW1lc3BhY2UgdGhhdCBoYXMgbm90IGJlZW4KLQkvLyByZWdpc3RlcmVkIHByb2R1Y2VzIGFuIGVtcHR5IGxpc3QuCi0JSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJbXSBjdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKCJodHRwOi8vbm9ucmVnaXN0ZXJlZG5hbWVzcGFjZSIpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGFycmF5IG9mIGN1c3RvbWl6ZXJzIGZvciBhbiB1bnJlZ2lzdGVyZWQgbmFtZXNwYWNlIGlzIG5vdCBlbXB0eS4iLCAwLCBjdXN0b21pemVycy5sZW5ndGgpOwotCQotCS8vIDIuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSByZXR1cm5zIHRoZQotCS8vIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIuCi0JSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgY3VzdG9taXplciA9IG5ldyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpewotCSAgcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIAotCSAgewotCSAgICAvLyBUaGlzIHN0dWIgZm9yIHRlc3RpbmcgZG9lcyBub3QgcmVxdWlyZSBhbiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0JfTsKLQlyZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG51bGwsIGN1c3RvbWl6ZXIpOwotCWN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMobnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgYXJyYXkgb2YgY3VzdG9taXplcnMgZm9yIGEgcmVnaXN0ZXJlZCBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgZG9lcyBub3QgY29udGFpbiAxIGN1c3RvbWl6ZXIuIiwgMSwgY3VzdG9taXplcnMubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2Ugd2FzIG5vdCBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuIiwgY3VzdG9taXplciwgY3VzdG9taXplcnNbMF0pOwotCQotCS8vIDMuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlIHJldHVybnMKLQkvLyAgICB0aGUgb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlLgotCWN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMoIiIpOwotCWFzc2VydEVxdWFscygiMy4gVGhlIGFycmF5IG9mIGN1c3RvbWl6ZXJzIGZvciBhIHJlZ2lzdGVyZWQgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIGRvZXMgbm90IGNvbnRhaW4gMSBjdXN0b21pemVyIGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZS4iLCAxLCBjdXN0b21pemVycy5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiMy4gVGhlIGN1c3RvbWl6ZXIgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJldHVybmVkLiIsIGN1c3RvbWl6ZXIsIGN1c3RvbWl6ZXJzWzBdKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTAyZDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLS8qKgotICogQSB3cmFwcGVyIGZvciB0aGUgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgY2xhc3MgdG8gYWxsb3cgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIgZXh0ZW5kcyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSAKLXsKLSAgLyoqCi0gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIoKQotICB7Ci0Jc3VwZXIoKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmN2U0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIC8qKgotICAgKiBUZXN0IHRoZSBsb2FkQ3VzdG9taXplciBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgYSB2YWxpZCBidW5kbGUgYSBjbGFzcyBzdWNjZWVkcy4KLSAgICogMi4gVGVzdCB0aGF0IGFuIGludmFsaWQgY2xhc3MgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotICAgKiAzLiBUZXN0IHRoYXQgYSBudWxsIGJ1bmRsZSBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TG9hZEN1c3RvbWl6ZXIoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IGEgdmFsaWQgYnVuZGxlIGEgY2xhc3Mgc3VjY2VlZHMuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZSA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLlNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQlkZWxlZ2F0ZS5sb2FkQ3VzdG9taXplcigpOwotCWFzc2VydE5vdE51bGwoIjEuIFRoZSBjdXN0b21pemVyIGxvYWRlZCB3YXMgbnVsbCBmb3IgYSB2YWxpZCBjdXN0b21pemVyIGFuZCBidW5kbGUuIiwgZGVsZWdhdGUuZ2V0Q3VzdG9taXplcigpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYW4gaW52YWxpZCBjbGFzcyBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZTIgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5Ob25leGlzdGFudEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQlkZWxlZ2F0ZTIubG9hZEN1c3RvbWl6ZXIoKTsKLQlhc3NlcnROdWxsKCIyLiBUaGUgY3VzdG9taXplciBsb2FkZWQgd2FzIG5vdCBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIgY2xhc3MuIiwgZGVsZWdhdGUyLmdldEN1c3RvbWl6ZXIoKSk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IGEgbnVsbCBidW5kbGUgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUzID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIobnVsbCwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JZGVsZWdhdGUzLmxvYWRDdXN0b21pemVyKCk7Ci0JYXNzZXJ0TnVsbCgiMy4gVGhlIGN1c3RvbWl6ZXIgbG9hZGVkIHdhcyBub3QgbnVsbCBmb3IgYSBudWxsIGJ1bmRsZS4iLCBkZWxlZ2F0ZTMuZ2V0Q3VzdG9taXplcigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGN1c3RvbWl6ZU1lc3NhZ2UgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIGNvcnJlY3QgZm9yIGEgdmFsaWQgY3VzdG9taXplci4KLSAgICogMi4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21pemVNZXNzYWdlKCkKLSAgewotICAgIC8vIDEuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBjb3JyZWN0IGZvciBhIHZhbGlkIGN1c3RvbWl6ZXIuCi0gICAgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZSA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLlNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlbGVnYXRlLmN1c3RvbWl6ZU1lc3NhZ2UobnVsbCwgbnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgbWVzc2FnZSByZXR1cm5lZCB3YXMgbm90IEFBQUEuIiwgIkFBQUEiLCBtZXNzYWdlKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyIGNsYXNzLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUyID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uTm9uZXhpc3RhbnRFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JbWVzc2FnZSA9IGRlbGVnYXRlMi5jdXN0b21pemVNZXNzYWdlKG51bGwsIG51bGwsIG51bGwpOwotCWFzc2VydE51bGwoIjIuIFRoZSBtZXNzYWdlIHJldHVybmVkIHdhcyBub3QgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyLiIsIG1lc3NhZ2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViODcxNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIEEgd3JhcHBlciBvZiB0aGUgY2xhc3MgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlIHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZXh0ZW5kcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKEJ1bmRsZSBidW5kbGUsIFN0cmluZyBjbGFzc25hbWUpCi0gIHsKLQlzdXBlcihidW5kbGUsIGNsYXNzbmFtZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlI2xvYWRDdXN0b21pemVyKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvYWRDdXN0b21pemVyKCkKLSAgewotCXN1cGVyLmxvYWRDdXN0b21pemVyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBnZXRDdXN0b21pemVyKCkKLSAgewotCXJldHVybiBjdXN0b21pemVyOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL1NhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL1NhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2MTgyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotLyoqCi0gKiBBIHNhbXBsZSBlcnJvciBtZXNzYWdlIGN1c3RvbWl6ZXIgZm9yIHRlc3RpbmcuIFRoaXMgY3VzdG9taXplciBoYXMgYSBzaW1wbGUKLSAqIGltcGxlbWVudGF0aW9uIHRoYXQgc2ltcGxlIHJldHVybnMgdGhlIHN0cmluZyAiQUFBQSIuCi0gKi8KLXB1YmxpYyBjbGFzcyBTYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIGltcGxlbWVudHMgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLklFcnJvck1lc3NhZ2VDdXN0b21pemVyI2N1c3RvbWl6ZU1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVsZW1lbnRJbmZvcm1hdGlvbiwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdFtdKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sCi0JCQlTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiAiQUFBQSI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNjZDZjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YTUxWYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0OwotCi0vKioKLSAqIFRoZSByb290IHRlc3Qgc3VpdGUgdGhhdCBjb250YWlucyBhbGwgb3RoZXIgWE1MIHZhbGlkYXRvciB0ZXN0IHN1aXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFhNTFRlc3RzIGV4dGVuZHMganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZQotewotICAvKioKLSAgICogQ3JlYXRlIHRoaXMgdGVzdCBzdWl0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhpcyB0ZXN0IHN1aXRlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQWxsWE1MVGVzdHMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWxsWE1MVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIlhNTCBWYWxpZGF0aW9uIFRlc3QgU3VpdGUiKTsKLSAgICBhZGRUZXN0KFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MRXhhbXBsZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoWEluY2x1ZGVUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdC5jbGFzcyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQzMzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MVmFsaWRhdG9yOwotCi0KLS8qKgotICogQmFzZSB0ZXN0IGNhc2UgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyB0byAKLSAqIC0gY3JlYXRlIGxvZ3MKLSAqIC0gcmVhZCBmcm9tIGxvZ3MKLSAqIC0gcnVuIGxvZyBjb21wYXJpc29uIHRlc3RzCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOyAKLSAgcHJvdGVjdGVkIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgcHJvdGVjdGVkIFN0cmluZyBTQU1QTEVTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvIjsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRvciB2YWxpZGF0b3IgPSBYTUxWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLSAgICBjb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLklORElDQVRFX05PX0dSQU1NQVIsIDApOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBmZWF0dXJlIG9uIHRoZSBYTUwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLiIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBhbmQgY29tcGFyZSB0aGUgdmFsaWRhdGlvbiByZXN1bHQgd2l0aAotICAgKiB0aGUgaW5mb3JtYXRpb24gc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBrZXlzIFRoZSBsaXN0IG9mIGFsbG93cyBtZXNzYWdlIGtleXMuCi0gICAqIEBwYXJhbSBudW1FcnJvcnMgVGhlIG51bWJlciBvZiBleHBlY3RlZCBlcnJvcnMuCi0gICAqIEBwYXJhbSBudW1XYXJuaW5ncyBUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIHdhcm5pbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIExpc3Qga2V5cywgaW50IG51bUVycm9ycywgaW50IG51bVdhcm5pbmdzKQotICB7Ci0gICAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCQotCVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotCQotCWludCBlcnJvckNvdW50ID0gMDsKLQlpbnQgd2FybmluZ0NvdW50ID0gMDsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotCSAgU3RyaW5nIGtleSA9IHZhbG1lcy5nZXRLZXkoKTsKLQkgIGFzc2VydFRydWUoIlRoZSBtZXNzYWdlIGtleSAiICsga2V5ICsgIiBpcyBub3QgY29ycmVjdC4iLCBrZXlzLmNvbnRhaW5zKGtleSkpOwotICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgIHsKLSAgICAgICAgd2FybmluZ0NvdW50Kys7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKGVycm9yQ291bnQgKyAiIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtRXJyb3JzICsgIiBlcnJvcnMgd2VyZSBleHBlY3RlZC4iLCBudW1FcnJvcnMsIGVycm9yQ291bnQpOwotCWFzc2VydEVxdWFscyh3YXJuaW5nQ291bnQgKyAiIHdhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1XYXJuaW5ncyArICIgd2FybmluZ3Mgd2VyZSBleHBlY3RlZC4iLCBudW1XYXJuaW5ncywgd2FybmluZ0NvdW50KTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDA2ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiYnVnZml4ZXMvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Um9vdE5vTlNDaGlsZE5TKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlJvb3ROb05TQ2hpbGROUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiUm9vdE5vTlNDaGlsZE5TLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFbXB0eSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdpdGhEVERWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJWYWxpZGF0ZVdpdGhEVERWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV2l0aERUREludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVmFsaWRhdGVXaXRoRFRESW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1TR19DT05URU5UX0lOVkFMSUQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vdFdlbGxGb3JtZWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm90V2VsbEZvcm1lZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm90V2VsbEZvcm1lZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJFVGFnUmVxdWlyZWQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRIb3N0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRIb3N0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkTG9jYXRpb24oKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZExvY2F0aW9uIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0dyYW1tYXIoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm9HcmFtbWFyIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJOb0dyYW1tYXIvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTk9fR1JBTU1BUl9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0KLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCB0cnVlKTsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSLCAxKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIFdBUk5fTk9fR1JBTU1BUi4iKTsKLQl9Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLklORElDQVRFX05PX0dSQU1NQVIsIDApOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gV0FSTl9OT19HUkFNTUFSLiIpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05hbWVzcGFjZVNjaGVtYSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJOb05hbWVzcGFjZVNjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm9OYW1lc3BhY2VTY2hlbWEvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWU2YjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotCi0KLS8qKgotICogVGVzdHMgdGhlICJob25vdXIgYWxsIHNjaGVtYSBsb2NhdGlvbnMiIGZlYXR1cmUuIAotICovCi1wdWJsaWMgY2xhc3MgSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwdWJsaWMgdm9pZCB0ZXN0SG9ub3Vyc0FsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMDsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2FuVHVybk9mZkhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAga2V5cy5hZGQobnVsbCk7Ci0gICAga2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGludCBudW1FcnJvcnMgPSAyOwotICAgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLSAgICBydW5UZXN0KHRlc3RGaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFRlc3RGaWxlKCkKLSAgewotICAgIHJldHVybiBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJYTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS1pbnN0YW5jZS54bWwiOyAvLyROT04tTkxTLTEkCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiNjUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLQotLyoqCi0gKiBBIHRlc3QgY2xhc3MgdG8gdGVzdCB0aGUgbGluZSBudW1iZXIgYWRqdXN0bWVudHMgbWFkZSBpbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIExpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSID0gIkxpbmVOdW1iZXJBZGp1c3RtZW50cy8iOwotCQotCS8qKgotCSAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBhbmQgY29tcGFyZSB0aGUgdmFsaWRhdGlvbiByZXN1bHQgd2l0aAotCSAqIHRoZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQuCi0JICogCi0JICogQHBhcmFtIHRlc3RmaWxlIAotCSAqIAkJCVRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0JICogQHBhcmFtIGtleSAKLQkgKiAJCQlUaGUgbWVzc2FnZSBrZXkuCi0JICogQHBhcmFtIG51bUVycm9ycyAKLQkgKiAJCQlUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIGVycm9ycy4KLQkgKiBAcGFyYW0gbnVtV2FybmluZ3MgCi0JICogCQkJVGhlIG51bWJlciBvZiBleHBlY3RlZCB3YXJuaW5ncy4KLQkgKiBAcGFyYW0gbGluZW5vCi0JICogCQkJVGhlIGxpbmUgbnVtYmVyIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBsb2NhdGVkIG9uLgotCSAqIEBwYXJhbSBjb2x1bW5ubwotCSAqIAkJCVRoZSBjb2x1bW4gbnVtYmVyIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBsb2NhdGVkIG9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcga2V5LCBpbnQgbnVtRXJyb3JzLCBpbnQgbnVtV2FybmluZ3MsIGludCBsaW5lbm8sIGludCBjb2x1bW5ubykKLQl7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh0ZXN0ZmlsZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0JCQotICAgICAgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcyA9IHZhbHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQkgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsKLQkJCi0gICAgICBpbnQgZXJyb3JDb3VudCA9IDA7Ci0JICBpbnQgd2FybmluZ0NvdW50ID0gMDsKLQotCSAgZm9yKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0JICB7Ci0JICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotCQlTdHJpbmcgbWVzc2tleSA9IHZhbG1lcy5nZXRLZXkoKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIG1lc3NhZ2Uga2V5ICIgKyBrZXkgKyAiIGlzIG5vdCBjb3JyZWN0LiIsIGtleS5lcXVhbHMobWVzc2tleSkpOwotCQlhc3NlcnRFcXVhbHMoIlRoZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgbGluZW5vLCB2YWxtZXMuZ2V0TGluZU51bWJlcigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgY29sdW1ubm8sIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0JICAgIHsKLQkgICAgICB3YXJuaW5nQ291bnQrKzsKLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBlcnJvckNvdW50Kys7Ci0JICAgIH0KLQkgIH0KLQkgIGFzc2VydEVxdWFscyhlcnJvckNvdW50ICsgIiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bUVycm9ycyArICIgZXJyb3JzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtRXJyb3JzLCBlcnJvckNvdW50KTsKLSAgICAgIGFzc2VydEVxdWFscyh3YXJuaW5nQ291bnQgKyAiIHdhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1XYXJuaW5ncyArICIgd2FybmluZ3Mgd2VyZSBleHBlY3RlZC4iLCBudW1XYXJuaW5ncywgd2FybmluZ0NvdW50KTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Y3ZjY29tcGxleHR5cGUyMygpCi0JewotCSAgU3RyaW5nIHRlc3RuYW1lID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiOwotCSAgaW50IGxpbmVubyA9IDI7Ci0JICBpbnQgY29sdW1ubm8gPSAxODc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTI0YigpCi0JewotCSAgU3RyaW5nIHRlc3RuYW1lID0gImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiOwotCSAgaW50IGxpbmVubyA9IDI7Ci0JICBpbnQgY29sdW1ubm8gPSAxODc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNc2dDb250ZW50SW5jb21wbGV0ZSgpCi0JewotCSAgU3RyaW5nIHRlc3RuYW1lID0gIk1TR19DT05URU5UX0lOQ09NUExFVEUiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiTVNHX0NPTlRFTlRfSU5DT01QTEVURS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gIk1TR19DT05URU5UX0lOQ09NUExFVEUiOwotCSAgaW50IGxpbmVubyA9IDY7Ci0JICBpbnQgY29sdW1ubm8gPSA3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TXNnQ29udGVudEludmFsaWQoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJNU0dfQ09OVEVOVF9JTlZBTElEIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgIk1TR19DT05URU5UX0lOVkFMSUQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJNU0dfQ09OVEVOVF9JTlZBTElEIjsKLQkgIGludCBsaW5lbm8gPSA2OwotCSAgaW50IGNvbHVtbm5vID0gNzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjM5MGMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQoteyAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhTX0RJUiA9ICJQYXRocy8iOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLyAKLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWEluY2x1ZGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOWFiNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWEluY2x1ZGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSBYSW5jbHVkZSBmZWF0dXJlLiAKLSAqLwotcHVibGljIGNsYXNzIFhJbmNsdWRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNYSW5jbHVkZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uVVNFX1hJTkNMVURFLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMDsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2FuVHVybk9mZlhJbmNsdWRlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5VU0VfWElOQ0xVREUsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBrZXlzLmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYSIpOwotICAgIGludCBudW1FcnJvcnMgPSAxOwotICAgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLSAgICBydW5UZXN0KHRlc3RGaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFRlc3RGaWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlhNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwiOwotICAgIHJldHVybiB0ZXN0ZmlsZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxFeGFtcGxlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxMWY2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxFeGFtcGxlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIHRoZSBYTUwgdmFsaWRhdG9yIHRvIHRlc3QgdGhlIFhNTFByb2plY3QuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFhNTEV4YW1wbGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQoteyAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTEV4YW1wbGVzX0RJUiA9ICJYTUxFeGFtcGxlcy8iOwotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYTUxFeGFtcGxlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2UvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGUoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZVJlbW90ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfSAgCi0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlSW5kaXJlY3QoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZUluZGlyZWN0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlUmVtb3RlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2VJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLSAgICAKLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZ3VlKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNhdGFsb2d1ZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiUHVibGljYXRpb25DYXRhbG9ndWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDYXRhbG9ndWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNhdGFsb2d1ZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIlB1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0gICAgCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwuCi0gICAqLwotICAvKioKLSAgcHVibGljIHZvaWQgdGVzdFdlYigpCi0gIHsKLQkgIAotICAJU3RyaW5nIHRlc3RuYW1lID0gIndlYiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiajJlZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAqLwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZWUzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoaXMgdGVzdCBwbHVnaW4uCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQotCXB1YmxpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbigpIHsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbHVnaW5Mb2NhdGlvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlID0gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotCQlyZXR1cm4gbmV3IFBhdGgoZmlsZSkucmVtb3ZlVHJhaWxpbmdTZXBhcmF0b3IoKS50b1N0cmluZygpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luIGdldFBsdWdpbigpCi0JewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVhMzMxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5BbGxYTUxUZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk4NWM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHJvb3QgWwotPCFFTEVNRU5UIHJvb3QgKGNoaWxkKyk+Ci08IUVMRU1FTlQgY2hpbGQgKCNQQ0RBVEEpPgotXT4KLTxyb290PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMWJkNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSByb290IFsKLTwhRUxFTUVOVCByb290IChjaGlsZCspPgotPCFFTEVNRU5UIGNoaWxkICgjUENEQVRBKT4KLV0+Ci08cm9vdD4KLWFhYWEKLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvTm9DaGlsZHJlbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMGY0ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvTm9DaGlsZHJlbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InRuczpOZXdYU0RDb21wbGV4VHlwZSI+PC9lbGVtZW50PgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5ld1hTRENvbXBsZXhUeXBlIj4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MDVlY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpNeUVsZW1lbnQgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIE5vQ2hpbGRyZW4ueHNkICI+Ci1hYWFhYQotPC90bnM6TXlFbGVtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9Ob0NoaWxkcmVuLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMDFhMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9Ob0NoaWxkcmVuLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIj4KLQotICAgIDxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0idG5zOk5ld1hTRENvbXBsZXhUeXBlIj48L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmV3WFNEQ29tcGxleFR5cGUiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgCTwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmJlZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOk15RWxlbWVudCB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4gTm9DaGlsZHJlbi54c2QgIj4KLSAgCi08L3RuczpNeUVsZW1lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EtaW5zdGFuY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE3Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EtaW5zdGFuY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG5zQTpBIHhtbG5zOm5zQT0idXJuOm5zQSIgeG1sbnM6cD0idXJuOm5zQiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJ1cm46bnNBIEEueHNkICI+Ci0gIDxwOkIxPnA6QjE8L3A6QjE+Ci0gIDxwOkIyPnA6QjI8L3A6QjI+Ci08L25zQTpBPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0M2U3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0idXJuOm5zQSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpuc0I9InVybjpuc0IiIHhtbG5zOm5zQT0idXJuOm5zQSI+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm5zQiIgc2NoZW1hTG9jYXRpb249IkIxLnhzZCIvPgotCTxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46bnNCIiBzY2hlbWFMb2NhdGlvbj0iQjIueHNkIi8+Ci0JPGVsZW1lbnQgbmFtZT0iQSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9Im5zQjpCMSI+PC9lbGVtZW50PgotCQkJCTxlbGVtZW50IHJlZj0ibnNCOkIyIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhODVhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0idXJuOm5zQiIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQjEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGVjZTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46bnNCIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICA8ZWxlbWVudCBuYW1lPSJCMiIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBJbnZvaWNlIChIZWFkZXIsSXRlbSspPgotPCFFTEVNRU5UIEhlYWRlciAoRGF0ZSxCaWxsVG8pPgotPCFBVFRMSVNUIEhlYWRlcgotIGludm9pY2VOdW1iZXIgQ0RBVEEgI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgSXRlbSAoZGVzY3JpcHRpb24qKT4KLTwhQVRUTElTVCBJdGVtCi0gcHJpY2UgQ0RBVEEgI1JFUVVJUkVECi0gZGlzY291bnQgKHByb21vdGlvbiB8IHJlZ3VsYXIpICJyZWd1bGFyIgotPgotPCFFTEVNRU5UIERhdGUgKChNb250aCxEYXksWWVhcil8KERheSxNb250aCxZZWFyKSk+Ci08IUVMRU1FTlQgQmlsbFRvIChBZGRyZXNzKT4KLTwhQVRUTElTVCBCaWxsVG8KLSBjdXN0TnVtYmVyIElEICNSRVFVSVJFRAotIG5hbWUgQ0RBVEEgI0lNUExJRUQKLSBwaG9uZSBDREFUQSAjSU1QTElFRAotPgotPCFFTEVNRU5UIGRlc2NyaXB0aW9uICgjUENEQVRBKT4KLTwhRUxFTUVOVCBBZGRyZXNzIChzdHJlZXQxLHN0cmVldDI/LGNpdHksKHN0YXRlfHByb3ZpbmNlKSx6aXAsY291bnRyeT8pPgotPCFFTEVNRU5UIHN0cmVldDEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0cmVldDIgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNpdHkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0YXRlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBwcm92aW5jZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgemlwICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjb3VudHJ5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBNb250aCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgRGF5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBZZWFyICgjUENEQVRBKT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YWYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzlhZjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViYTNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbnZvaWNlLmR0ZCI+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZUluZGlyZWN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllOTg3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZUluZGlyZWN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0luZGlyZWN0SW52b2ljZS5kdGQiPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OTg3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGM6Q2F0YWxvZ3VlIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGZmOWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIj4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+CQkJCi0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIwIi8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvcmVzdHJpY3Rpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiIGFic3RyYWN0PSJ0cnVlIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJDYXRhbG9ndWUiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJjOlB1YmxpY2F0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OTg3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSBDYXRhbG9ndWUueHNkICI+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPlByb2Zlc3Npb25hbCBYTUwgU2NoZW1hPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MS04NjEwMDUtNDctNDwvaXNibj4KLQkJPHB1Ymxpc2hlcj5Xcm94IFByZXNzPC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci0JPGM6TWFnYXppbmU+Ci0JCTx0aXRsZT5XZWJTcGhlcmUgRGV2ZWxvcGVyJ3MgSm91cm5hbDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JPC9jOk1hZ2F6aW5lPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5KYXZhIGFuZCBYU0xUPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MC01OTYtMDAxNDMtNjwvaXNibj4KLQkJPHB1Ymxpc2hlcj5PJ1JlaWxseTwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotPC9jOkNhdGFsb2d1ZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvYm9keS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL2JvZHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzg1NzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvYm9keS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Ym9keSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibWFzdGVyLnhzZCIvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZiYWU3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bWFzdGVyIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJtYXN0ZXIueHNkIj4KLSAgPCEtLSA8Ym9keS8+IC0tPgotICA8eGk6aW5jbHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgaHJlZj0iYm9keS54bWwiLz4KLTwvbWFzdGVyPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzRmNTdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWFzdGVyIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czplbGVtZW50IHJlZj0iYm9keSIgLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJib2R5Ii8+Ci08L3hzOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzYwYTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0gICAgPGRpc3BsYXktbmFtZT5tb2R1bGU8L2Rpc3BsYXktbmFtZT4KLSAgICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgICA8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkSG9zdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkSG9zdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZThkYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGV4YW1wbGUgUFVCTElDICJQdWJsaWMgSWRlbnRpZmllciIgImh0dHA6Ly93d3cuZWNsaXBzZS5ibGFoL25vbi1leGlzdGVudC1kdGQuZHRkIj4KLTxleGFtcGxlLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkTG9jYXRpb24ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxYjhiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkTG9jYXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGV4YW1wbGUgUFVCTElDICJQdWJsaWMgSWRlbnRpZmllciIgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvbm9uLWV4aXN0ZW50LWR0ZC5kdGQiPgotPGV4YW1wbGUvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlN2JhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdCB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQgc2ltcGxlbmVzdGVkLnhzZCAiPgotICA8Y2hpbGQxPmNoaWxkMTwvY2hpbGQxPgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2Y1YWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJyb290Ij4KLSAgICAJPGNvbXBsZXhUeXBlPgotICAgIAkJPHNlcXVlbmNlPgotCi0gICAgCQkJPGVsZW1lbnQgcmVmPSJ0bnM6Y2hpbGQxIj48L2VsZW1lbnQ+Ci0gICAgCQkJPGVsZW1lbnQgcmVmPSJ0bnM6Y2hpbGQyIj48L2VsZW1lbnQ+Ci0gICAgCQk8L3NlcXVlbmNlPgotICAgIAk8L2NvbXBsZXhUeXBlPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudCBuYW1lPSJjaGlsZDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIDxlbGVtZW50IG5hbWU9ImNoaWxkMiIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OWM4ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCTxjaGlsZD4KLQkJPGNoaWxkMi8+Ci0JPC9jaGlsZD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGYxOWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Ik5vTmFtZXNwYWNlU2NoZW1hLnhzZCI+Ci0gIDxjaGlsZDE+Y2hpbGQxPC9jaGlsZDE+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmIwZjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJSb290VHlwZSI+PC94c2Q6ZWxlbWVudD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJvb3RUeXBlIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaGlsZDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2hpbGQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTliMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0gIDxub2Nsb3Npbmd0YWc+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTQ0ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnID8+Ci08cm9vdD4KLSAgPHRlc3Q6dGVzdCB4bWxuczp0ZXN0PSJodHRwOi8vdGVzdC5vcmcvdGVzdCI+Ci0gIDwvdGVzdDp0ZXN0PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA0ZDBhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgotPCFET0NUWVBFIHNpbXBsZSBTWVNURU0gInNpbXBsZS5kdGQiPgotCi08c2ltcGxlIHZlcnNpb249IjIuMCIgeG1sbnM9Imh0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUiPgotIDxkdW1teT4gPC9kdW1teT4KLTwvc2ltcGxlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk1ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgotPCFET0NUWVBFIHNpbXBsZSBTWVNURU0gInNpbXBsZS5kdGQiPgotCi08c2ltcGxlIHZlcnNpb249IjIuMCIgeG1sbnM9Imh0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUiPgotICA8c2ltcGxlMT4KLSAgICA8c2ltcGxlMi8+Ci0gIDwvc2ltcGxlMT4KLTwvc2ltcGxlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvc2ltcGxlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NDliOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvc2ltcGxlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPCFFTEVNRU5UIHNpbXBsZSAoc2ltcGxlMSk+Ci08IUFUVExJU1Qgc2ltcGxlIAotICAgICAgICAgICB2ZXJzaW9uIENEQVRBICNSRVFVSVJFRAotICAgICAgICAgICB4bWxucyBDREFUQSAjRklYRUQgJ2h0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUnIAotICAgICAgICAgICA+Ci08IUVMRU1FTlQgc2ltcGxlMSAoc2ltcGxlMik+Ci08IUVMRU1FTlQgc2ltcGxlMiBFTVBUWT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2U2MWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyNWIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YmRhYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1dlZCBKYW4gMDkgMTY6NDU6MDMgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODNmMDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAyLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogeHNkY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsLlhTRENvcmVUZXN0c1BsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi40LjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMSwyLjAuMCkiCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmRmODEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgeHNkY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sCi1zb3VyY2UueHNkY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC54c2Rjb3JldGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRjZTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IFhTRCBDb3JlIFRlc3RzIFBsdWdpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0FsbFhTRENvcmVUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQWxsWFNEQ29yZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiOWEyYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQWxsWFNEQ29yZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYU0QgQ29yZSB0ZXN0IHN1aXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFhTRENvcmVUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhTRENvcmVUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RDb3JlVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFhTRENvcmVUZXN0cyIpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVmYjFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgR0VORVJBVEVEX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIElERUFMX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgTE9HX0ZJTEVfTE9DQVRJT04gPSAicmVzdWx0cy5sb2ciOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpCi0gIHsKLSAgICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhTRENvcmVUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRlRmlsZVVzaW5nQ2F0YWxvZyhTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gICAgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpOwotICAgIFN0cmluZyByZXN1bHQgPSByZXNvbHZlci5yZXNvbHZlKCIiLCBuYW1lc3BhY2VVUkksICIiKTsKLSAgICBTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlci5yZXNvbHZlUGh5c2ljYWxMb2NhdGlvbigiIiwgbmFtZXNwYWNlVVJJLCByZXN1bHQpOwotICAgIGlmIChyZXNvbHZlZFVSSSA9PSBudWxsIHx8IHJlc29sdmVkVVJJLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc29sdmVkVVJJOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYTU2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDE1NzI1NCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuQ01Eb2N1bWVudEZhY3RvcnlYU0Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLkRvY3VtZW50YXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGwuWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLlhTRE1vZGVsR3JvdXBBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiQnVnRml4ZXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEJ1Z0ZpeGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLy8gQWRkIHRlc3RzIGhlcmUKLSAgCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgdm9pZCB0ZXN0WFNJVHlwZSgpCi0gIHsKLSAgICBTdHJpbmcgc29hcFNjaGVtYVVSSSA9IGxvY2F0ZUZpbGVVc2luZ0NhdGFsb2coImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iKTsKLQotICAgIENNRG9jdW1lbnRGYWN0b3J5WFNEIGZhY3RvcnkgPSBuZXcgQ01Eb2N1bWVudEZhY3RvcnlYU0QoKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgZmFjdG9yeSBpcyBub3QgbnVsbCIsIGZhY3RvcnkpOwotICAgIAotICAgIENNRG9jdW1lbnQgY21Eb2N1bWVudCA9IGZhY3RvcnkuY3JlYXRlQ01Eb2N1bWVudChzb2FwU2NoZW1hVVJJKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgQ01Eb2N1bWVudCBpcyBub3QgbnVsbCIsIGNtRG9jdW1lbnQpOwotICAgICAgICAKLSAgICBDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGNtRG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAKLSAgICBib29sZWFuIGZvdW5kRGVzaXJlZEVsZW1lbnQgPSBmYWxzZTsKLSAgICBmb3IgKEl0ZXJhdG9yPENNRWxlbWVudERlY2xhcmF0aW9uPiBpID0gZWxlbWVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gaS5uZXh0KCk7Ci0gICAgICBpZiAoImJpbmRpbmciLmVxdWFscyhlbGVtZW50LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgewotICAgICAgICBmb3VuZERlc2lyZWRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChhdHRyaWJ1dGVzKTsgIC8vIFRocmVlIGF0dHJpYnV0ZXM6IHJlcXVpcmVkLCB0cmFuc3BvcnQgYW5kIHN0eWxlCi0gICAgICAgIGFzc2VydFRydWUoYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA9PSAzKTsgIC8vIElmIHRoZSB4c2k6dHlwZSB3YXMgcHJlc2VudCwgaXQgd291bGQgYmUgNCBhdHRyaWJ1dGVzCi0gICAgICAgIAotICAgICAgICBDTU5vZGUgYXR0ck5vZGUgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgicmVxdWlyZWQiKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChhdHRyTm9kZSk7Ci0gICAgICAgIGF0dHJOb2RlID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInRyYW5zcG9ydCIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGF0dHJOb2RlKTsKLSAgICAgICAgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgic3R5bGUiKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChhdHRyTm9kZSk7Ci0gICAgICAgIGF0dHJOb2RlID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInR5cGUiKTsgIC8vIFNob3VsZCBiZSBudWxsIQotICAgICAgICBhc3NlcnROdWxsKGF0dHJOb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydFRydWUoZm91bmREZXNpcmVkRWxlbWVudCk7IC8vIGlmIHdlIGRpZG4ndCBldmVuIGZpbmQgdGhlIGJpbmRpbmcgZWxlbWVudCwgdGhlbiBzb21ldGhpbmcgdGVycmlibGUgd2VudCB3cm9uZwotICB9Ci0gIAotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHZvaWQgdGVzdFN0YWNrT3ZlcmZsb3coKQotICB7Ci0gICAgU3RyaW5nIHZ4bWxTY2hlbWFVUkkgPSBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKCJodHRwOi8vd3d3LnczLm9yZy9UUi92b2ljZXhtbDIwL3Z4bWwueHNkIik7Ci0gICAgCi0gICAgLy8gU2VlIGJ1ZyAyMDYxMzgKLSAgICAKLSAgICAvLyBUd28gd2F5cyB0byB0ZXN0IHRoaXMuCi0gICAgLy8gRmlyc3Qgd2F5LiBDYWxsIGZpbmRUeXBlc0Rlcml2ZWRGcm9tIGZyb20gWFNESW1wbC4KLSAgICAKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNESW1wbC5idWlsZFhTRE1vZGVsKHZ4bWxTY2hlbWFVUkkpOwotICAgIGFzc2VydE5vdE51bGwoeHNkU2NoZW1hKTsKLSAgICBib29sZWFuIGZvdW5kRGVzaXJlZFR5cGUgPSBmYWxzZTsKLSAgICBmb3IgKEl0ZXJhdG9yPFhTRFR5cGVEZWZpbml0aW9uPiB0eXBlcyA9IHhzZFNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyB0eXBlcy5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gdHlwZXMubmV4dCgpOwotICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHR5cGU7Ci0gICAgICAgIGlmICgiYmFzaWMuZXZlbnQuaGFuZGxlciIuZXF1YWxzKGNvbXBsZXhUeXBlLmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZERlc2lyZWRUeXBlID0gdHJ1ZTsKLSAgICAgICAgICBMaXN0PFhTRFR5cGVEZWZpbml0aW9uPiBsaXN0ID0gWFNESW1wbC5maW5kVHlwZXNEZXJpdmVkRnJvbShjb21wbGV4VHlwZSk7Ci0gICAgICAgICAgaW50IHNpemUgPSBsaXN0LnNpemUoKTsKLSAgICAgICAgICAvLyBhc3NlcnRUcnVlKHNpemUgPT0gMSk7ICAvLyBpZiB3ZSBnb3Qgc29tZXRoaW5nIGJhY2ssIHRoZW4gZ3JlYXQsIHRoZXJlIHdhcyBubyBvdXQgb2Ygc3RhY2sgZXJyb3IKLSAgICAgICAgICBhc3NlcnRUcnVlKHNpemUgPj0gMCk7Ci0gICAgICAgICAgLy8gQmVjYXVzZSBvZiBidWcgMjAzMDQ4LCB0aGVyZSBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgdG8gcmVkZWZpbmVkIHR5cGVzLiAgCi0gICAgICAgICAgLy8gVGhlIGNvbXBsZXggdHlwZSBuYW1lZCBzcGVha2VyIGlzIG5vIGxvbmdlciBjaXJjdWxhci4gICBJbiB0ZXJtcyBvZiB0aGlzIGp1bml0LCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHJlbGV2YW50Ci0gICAgICAgICAgLy8gc2luY2Ugd2UganVzdCB3YW50IHNvbWUgbGVuZ3RoIGJhY2sgKGkuZS4gdGhlcmUgd2FzIG5vIGNyYXNoIGZyb20gYSBzdGFjayBvdmVyZmxvdykuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShmb3VuZERlc2lyZWRUeXBlKTsgIC8vIGlmIHdlIGRpZG4ndCBldmVuIGZpbmQgdGhlIGNvbXBsZXggdHlwZSwgdGhlbiBzb21ldGhpbmcgdGVycmlibGUgd2VudCB3cm9uZwotICAgIAotICAgIC8vIFNlY29uZCB3YXkgdG8gdGVzdCB2aWEgY29udGVudCBtb2RlbAotICAgIAotICAgIENNRG9jdW1lbnRGYWN0b3J5WFNEIGZhY3RvcnkgPSBuZXcgQ01Eb2N1bWVudEZhY3RvcnlYU0QoKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgZmFjdG9yeSBpcyBub3QgbnVsbCIsIGZhY3RvcnkpOwotICAgIAotICAgIENNRG9jdW1lbnQgY21Eb2N1bWVudCA9IGZhY3RvcnkuY3JlYXRlQ01Eb2N1bWVudCh2eG1sU2NoZW1hVVJJKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgQ01Eb2N1bWVudCBpcyBub3QgbnVsbCIsIGNtRG9jdW1lbnQpOwotICAgICAgICAKLSAgICBDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGNtRG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAKLSAgICBib29sZWFuIGZvdW5kRGVzaXJlZEVsZW1lbnQgPSBmYWxzZTsKLSAgICBmb3IgKEl0ZXJhdG9yPENNRWxlbWVudERlY2xhcmF0aW9uPiBpID0gZWxlbWVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gaS5uZXh0KCk7Ci0gICAgICBpZiAoIm5vaW5wdXQiLmVxdWFscyhlbGVtZW50LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgewotICAgICAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoYXR0cmlidXRlcyk7Ci0gICAgICAgIC8vIGFzc2VydFRydWUoYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA9PSAzKTsgIC8vIGlmIHdlIGdvdCBzb21ldGhpbmcgYmFjaywgdGhlbiBncmVhdCwgdGhlcmUgd2FzIG5vIG91dCBvZiBzdGFjayBlcnJvcgotICAgICAgICAvLyBCZWNhdXNlIG9mIGJ1ZyAyMDMwNDgsIHRoZXJlIGlzIGEgY2hhbmdlIGluIGJlaGF2aW91ciB0byByZWRlZmluZWQgdHlwZXMuICAKLSAgICAgICAgLy8gVGhlIGNvbXBsZXggdHlwZSBuYW1lZCBzcGVha2VyIGlzIG5vIGxvbmdlciBjaXJjdWxhci4gICBJbiB0ZXJtcyBvZiB0aGlzIGp1bml0LCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHJlbGV2YW50Ci0gICAgICAgIC8vIHNpbmNlIHdlIGp1c3Qgd2FudCBzb21lIGxlbmd0aCBiYWNrIChpLmUuIHRoZXJlIHdhcyBubyBjcmFzaCBmcm9tIGEgc3RhY2sgb3ZlcmZsb3cpLgotICAgICAgICBhc3NlcnRUcnVlKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPj0gMCk7Ci0gICAgICAgIGZvdW5kRGVzaXJlZEVsZW1lbnQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShmb3VuZERlc2lyZWRFbGVtZW50KTsgIC8vIGlmIHdlIGRpZG4ndCBldmVuIGZpbmQgdGhlIG5vaW5wdXQgZWxlbWVudCwgdGhlbiBzb21ldGhpbmcgdGVycmlibGUgd2VudCB3cm9uZwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0WFNEVHlwZVdoaXRlc3BhY2VGYWNldHMoKSB7Ci0JICAvLyBCdWcgWzE5NDY5OF0gLSBUZXN0IHRoYXQgdGhlIGNvcnJlY3Qgd2hpdGVzcGFjZSBmYWNldHMgYXJlIGFwcGxpZWQgdG8gdGhlIHR5cGVzCi0JICBTdHJpbmcgWFNEX0ZJTEVfTkFNRSA9ICJYU0RXaGl0ZXNwYWNlLnhzZCI7Ci0JICBTdHJpbmcgZmlsZVVSSSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0ZJTEVfTkFNRTsKLQkgIENNRG9jdW1lbnRGYWN0b3J5WFNEIGZhY3RvcnkgPSBuZXcgQ01Eb2N1bWVudEZhY3RvcnlYU0QoKTsKLQkgIGFzc2VydE5vdE51bGwoIkFzc2VydCBmYWN0b3J5IGlzIG5vdCBudWxsIiwgZmFjdG9yeSk7Ci0JICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQoZmlsZVVSSSk7Ci0JICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgQ01Eb2N1bWVudCBpcyBub3QgbnVsbCIsIGNtRG9jdW1lbnQpOwotCSAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbURlY2wgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pY21Eb2N1bWVudC5nZXRFbGVtZW50cygpLml0ZW0oMCk7Ci0JICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlbGVtRGVjbC5nZXROb2RlTmFtZSgpKTsKLQkgIGFzc2VydFRydWUoZWxlbURlY2wuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cEFkYXB0ZXIpOwotCSAgWFNETW9kZWxHcm91cEFkYXB0ZXIgZ3JvdXAgPSAoWFNETW9kZWxHcm91cEFkYXB0ZXIpIGVsZW1EZWNsLmdldENvbnRlbnQoKTsKLQkgIENNTm9kZUxpc3QgbGlzdCA9IGdyb3VwLmdldENoaWxkTm9kZXMoKTsKLQkgIFhTREVsZW1lbnREZWNsYXJhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0JICAKLQkgIFN0cmluZyBub2RlTmFtZSA9IG51bGwsIGV4cGVjdGVkID0gbnVsbDsKLQkgIENNRGF0YVR5cGUgdHlwZSA9IG51bGw7Ci0JICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBlbGVtZW50LCBleGFtaW5pbmcgdGhlIHdoaXRlc3BhY2UgZmFjZXRzICovCi0JICBmb3IoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCSAgYWRhcHRlciA9IChYU0RFbGVtZW50RGVjbGFyYXRpb25BZGFwdGVyKSBsaXN0Lml0ZW0oaSk7Ci0KLQkJICBub2RlTmFtZSA9IGFkYXB0ZXIuZ2V0Tm9kZU5hbWUoKTsKLQkJICBhc3NlcnROb3ROdWxsKG5vZGVOYW1lKTsKLQkJICBhc3NlcnRUcnVlKG5vZGVOYW1lLmNvbnRhaW5zKCItIikpOwotCQkgIHR5cGUgPSBhZGFwdGVyLmdldERhdGFUeXBlKCk7Ci0JCSAgYXNzZXJ0Tm90TnVsbCh0eXBlKTsKLQkJICAKLQkJICBleHBlY3RlZCA9IG5vZGVOYW1lLnN1YnN0cmluZyhub2RlTmFtZS5pbmRleE9mKCctJykgKyAxKTsKLQkJICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHR5cGUuZ2V0UHJvcGVydHkoWFNESW1wbC5QUk9QRVJUWV9XSElURVNQQUNFX0ZBQ0VUKSk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RYU0lUeXBlVnNUeXBlQXR0cigpIAotICB7Ci0gICAgICAKLSAgICAvLyBTZWUgYnVnIDIyNTQ0NywgMjI1ODE5Ci0gIAotICAgIC8vIExvYWQgdGhlIFhTRCBmaWxlCi0gICAgU3RyaW5nIFhTRF9GSUxFX05BTUUgPSAiWFNJVHlwZVRlc3QueHNkIjsKLSAgICBTdHJpbmcgZmlsZVVSSSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0ZJTEVfTkFNRTsKLSAgICBDTURvY3VtZW50RmFjdG9yeVhTRCBmYWN0b3J5ID0gbmV3IENNRG9jdW1lbnRGYWN0b3J5WFNEKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IGZhY3RvcnkgaXMgbm90IG51bGwiLCBmYWN0b3J5KTsKLSAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQoZmlsZVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IENNRG9jdW1lbnQgaXMgbm90IG51bGwiLCBjbURvY3VtZW50KTsKLSAgCi0gICAgLy8gQ2hlY2sgYW5kIG9idGFpbiB0aGUgdHdvIGdsb2JhbCBlbGVtZW50cyAoZWxlbWVudEEgYW5kIGVsZW1lbnRCKQotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIGFzc2VydEVxdWFscyhlbGVtZW50cy5nZXRMZW5ndGgoKSwgMik7Ci0gICAgQ01FbGVtZW50RGVjbGFyYXRpb24gY21FbGVtZW50RGVjbGFyYXRpb24gPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudHMuaXRlbSgwKTsKLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBjbUVsZW1lbnREZWNsYXJhdGlvbkEgPSBudWxsOwotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uQiA9IG51bGw7Ci0gICAgaWYgKCJlbGVtZW50QSIuZXF1YWxzKGNtRWxlbWVudERlY2xhcmF0aW9uLmdldEVsZW1lbnROYW1lKCkpKQotICAgIHsKLSAgICAgIGNtRWxlbWVudERlY2xhcmF0aW9uQSA9IGNtRWxlbWVudERlY2xhcmF0aW9uOwotICAgICAgY21FbGVtZW50RGVjbGFyYXRpb25CID0gKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLml0ZW0oMSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbUVsZW1lbnREZWNsYXJhdGlvbkIgPSBjbUVsZW1lbnREZWNsYXJhdGlvbjsKLSAgICAgIGNtRWxlbWVudERlY2xhcmF0aW9uQSA9IChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5pdGVtKDEpOwotICAgIH0KLSAgCi0gICAgLy8gZWxlbWVudEEgaGFzIGEgInR5cGUiIGF0dHJpYnV0ZSB3aXRoICJYIiBlbnVtZXJhdGVkIHZhbHVlLCBtYWtlIHN1cmUgaXQgYXBwZWFycyBpbiB0aGUgbW9kZWwKLSAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzQSA9IGNtRWxlbWVudERlY2xhcmF0aW9uQS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGF0dHJpYnV0ZXNBLmdldExlbmd0aCgpLCAxKTsKLSAgICBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGNtQXR0cmlidXRlRGVjbGFyYXRpb25BID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pYXR0cmlidXRlc0EuaXRlbSgwKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGUiLCBjbUF0dHJpYnV0ZURlY2xhcmF0aW9uQS5nZXRBdHRyTmFtZSgpKTsKLSAgICBDTURhdGFUeXBlIGF0dHJUeXBlQSA9IGNtQXR0cmlidXRlRGVjbGFyYXRpb25BLmdldEF0dHJUeXBlKCk7Ci0gICAgU3RyaW5nW10gZW51bWVyYXRlZFZhbHVlc0EgPSBhdHRyVHlwZUEuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotICAgIGFzc2VydEVxdWFscygxLCBlbnVtZXJhdGVkVmFsdWVzQS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiWCIsIGVudW1lcmF0ZWRWYWx1ZXNBWzBdKTsKLSAgCi0gICAgLy8gZWxlbWVudEIgZG9lcyBub3QgaGF2ZSBhICJ0eXBlIiBhdHRyaWJ1dGUsIG1ha2Ugc3VyZSB0aGUgeHNpOnR5cGUgYXBwZWFycyBpbiB0aGUgbW9kZWwKLSAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzQiA9IGNtRWxlbWVudERlY2xhcmF0aW9uQi5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGF0dHJpYnV0ZXNCLmdldExlbmd0aCgpLCAxKTsKLSAgICBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGNtQXR0cmlidXRlRGVjbGFyYXRpb25CID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pYXR0cmlidXRlc0IuaXRlbSgwKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGUiLCBjbUF0dHJpYnV0ZURlY2xhcmF0aW9uQi5nZXRBdHRyTmFtZSgpKTsKLSAgICBDTURhdGFUeXBlIGF0dHJUeXBlQiA9IGNtQXR0cmlidXRlRGVjbGFyYXRpb25CLmdldEF0dHJUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0eXBlTmFtZXMiLCBhdHRyVHlwZUIuZ2V0RGF0YVR5cGVOYW1lKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RW51bWVyYXRpb25zSW5Db21wbGV4VHlwZXNXaXRoU2ltcGxlQ29udGVudCgpCi0gIHsKLSAgICAvLyBTZWUgYnVnIDIxNTUxNAotCi0gICAgLy8gT2J0YWluIHRoZSBXZWIgQXBwbGljYXRpb24gc2NoZW1hCi0gICAgU3RyaW5nIHZ4bWxTY2hlbWFVUkkgPSBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKCJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIik7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTREltcGwuYnVpbGRYU0RNb2RlbCh2eG1sU2NoZW1hVVJJKTsKLSAgICBhc3NlcnROb3ROdWxsKHhzZFNjaGVtYSk7Ci0KLSAgICAvLyBUaGUgdHlwZSB0cmFuc3BvcnQtZ3VhcmFudGVlVHlwZSBpcyBkZWZpbmVkIGFzIGEgY29tcGxleCB0eXBlIHdpdGggc2ltcGxlIHR5cGUgY29udGVudAotICAgIC8vIEl0IGhhcyAzIGVudW1lcmF0ZWQgdmFsdWVzCi0gICAgU3RyaW5nIHR5cGVOYW1lID0gInRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIjsKLSAgICBmb3IgKEl0ZXJhdG9yPFhTRFR5cGVEZWZpbml0aW9uPiB0eXBlcyA9IHhzZFNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyB0eXBlcy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSB0eXBlcy5uZXh0KCk7Ci0gICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil0eXBlOwotICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKGNvbXBsZXhUeXBlLmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdbXSBlbnVtZXJhdGVkVmFsdWVzRm9yVHlwZSA9IFhTREltcGwuZ2V0RW51bWVyYXRlZFZhbHVlc0ZvclR5cGUoY29tcGxleFR5cGUpOwotICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSAzIGVudW1lcmF0ZWQgdmFsdWVzIGFyZSByZXR1cm5lZAotICAgICAgICAgIGFzc2VydEVxdWFscygzLCBlbnVtZXJhdGVkVmFsdWVzRm9yVHlwZS5sZW5ndGgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEdsb2JhbEVsZW1lbnREb2N1bWVudGF0aW9uKCkKLSAgewotICAgIC8vIFNlZSBidWcgMTU3MjU0Ci0KLQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vZ2xvYmFscmVmdGVzdC54c2QiKTsKLSAgICAKLQlDTURvY3VtZW50IGRvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCWFzc2VydE5vdE51bGwoIkNvbnRlbnQgbW9kZWwgbG9hZGVkIE51bGwiLCBkb2N1bWVudCk7Ci0gICAgCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIAotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIG5vZGUgPSAgKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLmdldE5hbWVkSXRlbSgicm9vdFRlc3QiKTsKLQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIHJvb3RFbGVtZW50Iiwgbm9kZSk7Ci0KLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiB0ZXN0RWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbilub2RlLmdldExvY2FsRWxlbWVudHMoKS5nZXROYW1lZEl0ZW0oInRlc3QiKTsKLQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIHRlc3QgZWxlbWVudCIsIHRlc3RFbGVtZW50KTsKLQotICAgIENNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KXRlc3RFbGVtZW50LmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0gICAgaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotICAgIAlmYWlsKCJ0ZXN0IGdsb2JhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgY250ID0gMDsgY250IDwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKTsgY250KyspIHsKLSAgICAJRG9jdW1lbnRhdGlvbkltcGwgZG9jID0gKERvY3VtZW50YXRpb25JbXBsKSBkb2N1bWVudGF0aW9uLml0ZW0oY250KTsKLSAgICAJYXNzZXJ0RXF1YWxzKCJUZXN0IGdsb2JhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iLCAiVGhpcyBzb21lIGdsb2JhbCBkb2N1bWVudGF0aW9uIiwgZG9jLmdldFZhbHVlKCkpOwotICAgIH0KLSAgICAKLSAgICB0ZXN0RWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbilub2RlLmdldExvY2FsRWxlbWVudHMoKS5nZXROYW1lZEl0ZW0oInRlc3RFbGVtZW50Iik7Ci0gICAgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KXRlc3RFbGVtZW50LmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0gICAgaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotICAgIAlmYWlsKCJ0ZXN0RWxlbWVudCBsb2NhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgY250ID0gMDsgY250IDwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKTsgY250KyspIHsKLSAgICAJRG9jdW1lbnRhdGlvbkltcGwgZG9jID0gKERvY3VtZW50YXRpb25JbXBsKSBkb2N1bWVudGF0aW9uLml0ZW0oY250KTsKLSAgICAJYXNzZXJ0RXF1YWxzKCJ0ZXN0RWxlbWVudCBkb2N1bWVudGF0aW9uIHdyb25nLiIsICJUaGlzIGlzIGFuIG92ZXJyaWRlIiwgZG9jLmdldFZhbHVlKCkpOwotICAgIH0gICAgCi0gIH0gIAotCi0gIHB1YmxpYyB2b2lkIHRlc3RHbG9iYWxBdHJyaWJ1dGVEb2N1bWVudGF0aW9uKCkKLSAgewotICAgIC8vIFNlZSBidWcgMTU3MjU0Ci0KLQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vVGVzdEF0dHJpYnV0ZVJlZnMueHNkIik7Ci0gICAgCi0JQ01Eb2N1bWVudCBkb2N1bWVudCA9IFhTREltcGwuYnVpbGRDTURvY3VtZW50KHVybC50b0V4dGVybmFsRm9ybSgpKTsKLQlhc3NlcnROb3ROdWxsKCJDb250ZW50IG1vZGVsIGxvYWRlZCBOdWxsIiwgZG9jdW1lbnQpOwotICAgIAotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAKLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBub2RlID0gIChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5nZXROYW1lZEl0ZW0oIm9iamVjdCIpOwotCWFzc2VydE5vdE51bGwoIk1pc3Npbmcgb2JqZWN0IGVsZW1lbnQiLCBub2RlKTsKLQkKLQlDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gIG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCXRlc3RHbG9iYWxBdHRyMURvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JdGVzdEdsb2JhbEF0dHIyRG9jdW1lbnRhdGlvbihhdHRyaWJ1dGVzKTsKLQl0ZXN0R2xvYmFsQXR0cjNEb2N1bWVudGF0aW9uKGF0dHJpYnV0ZXMpOwotCXRlc3RHbG9iYWxBdHRyNERvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JdGVzdExvY2FsQXR0ckRvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JCi0gfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEZvckJ1ZzE3NjQyMCgpIHsKLQkgIC8vIE9idGFpbiB0aGUgbW9kZWwgZnJvbSAvdGVzdHJlc291cmNlcy9zYW1wbGVzL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAueHNkCi0JICBCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQkgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QiKTsKLQkgIENNRG9jdW1lbnQgZG9jdW1lbnQgPSBYU0RJbXBsLmJ1aWxkQ01Eb2N1bWVudCh1cmwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JICBhc3NlcnROb3ROdWxsKCJDb250ZW50IG1vZGVsIGxvYWRlZCBOdWxsIiwgZG9jdW1lbnQpOwotCSAgCi0JICAvLyBPYnRhaW4gdGhlIGVudW1lcmF0ZWQgdmFsdWVzIG9mIHRoZSByb290IGVsZW1lbnQKLQkgIENNTm9kZSBjbU5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpLml0ZW0oMCk7Ci0JICBTdHJpbmdbXSBlbnVtZXJhdGVkVmFsdWVzID0gKChDTUVsZW1lbnREZWNsYXJhdGlvbiljbU5vZGUpLmdldERhdGFUeXBlKCkuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotCi0JICAvLyBWZXJpZnkgdGhhdCBhbGwgMTIgZW51bWVyYXRlZCB2YWx1ZXMgYXJlIGluY2x1ZGVkCi0JICBhc3NlcnRFcXVhbHMoMTIsIGVudW1lcmF0ZWRWYWx1ZXMubGVuZ3RoKTsKLSAgfQotICAKLQlwcml2YXRlIHZvaWQgdGVzdExvY2FsQXR0ckRvY3VtZW50YXRpb24oQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcykgewotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgibG9jYWxBdHRyIik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgbG9jYWxBdHRyIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJVbmFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciBsb2NhbEF0dHIiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIldyb25nIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIGFubm90YXRpb25zLiIsIDIsIGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBhbm5vdGF0aW9uIGZvciBsb2NhbEF0dHI6IiwKLQkJCQkJICJQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGZvciBsb2NhbCBhdHRyaWJ1dGUgcGFydCAxIiwKLQkJCQkJICgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDApKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGxvY2FsQXR0cjoiLAotCQkJCQkgIlBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDIiLAotCQkJCSAgICAgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMSkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCB0ZXN0R2xvYmFsQXR0cjFEb2N1bWVudGF0aW9uKENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oImdsb2JhbEF0dHIxIik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgZ2xvYmFsQXR0cjEgYXR0cmlidXRlLiIpOwotCQkKLQkJQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpYXR0cmlidXRlLmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0JCWlmIChkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpID09IDApIHsKLQkJCWZhaWwoIlVuYWJsZSB0byBmaW5kIGRvY3VtZW50YXRpb24gZm9yIGdsb2JhbEF0dHIxIik7Ci0JCX0KLQkJYXNzZXJ0RXF1YWxzKCJXcm9uZyBudW1iZXIgb2YgZG9jdW1lbnRhdGlvbiBhbm5vdGF0aW9ucy4iLCAyLCBkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgZmlyc3QgYW5ub3RhdGlvbiBmb3IgZ2xvYmFsQXR0cjE6IiwKLQkJIlBBU1MhIERvY3VtZW50YXRpb24gZm9yIGF0dHJpYnV0ZSByZWYgb3ZlcnJpZGVzIHRoZSByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIGRvY3VtZW50YXRpb24iLAotCQkoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc2Vjb25kIGFubm90YXRpb24gZm9yIGdsb2JhbEF0dHIxOiIsCi0JCSJQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzLiIsCi0JCSgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDEpKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JfSAgCi0KLQlwcml2YXRlIHZvaWQgdGVzdEdsb2JhbEF0dHIyRG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJnbG9iYWxBdHRyMiIpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGdsb2JhbEF0dHIxIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJVbmFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciBnbG9iYWxBdHRyMiIpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiV3JvbmcgbnVtYmVyIG9mIGRvY3VtZW50YXRpb24gYW5ub3RhdGlvbnMuIiwgMSwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGdsb2JhbEF0dHIyOiIsCi0JCSJQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgZG9lcyBub3QgaGF2ZSBkb2N1bWVudGF0aW9uIiwKLQkJKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHRlc3RHbG9iYWxBdHRyM0RvY3VtZW50YXRpb24oQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcykgewotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiZ2xvYmFsQXR0cjMiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBnbG9iYWxBdHRyMSBhdHRyaWJ1dGUuIik7Ci0JCQotCQlDTU5vZGVMaXN0IGRvY3VtZW50YXRpb24gPSAoQ01Ob2RlTGlzdClhdHRyaWJ1dGUuZ2V0UHJvcGVydHkoImRvY3VtZW50YXRpb24iKTsKLQkJaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotCQkJZmFpbCgiVW5hYmxlIHRvIGZpbmQgZG9jdW1lbnRhdGlvbiBmb3IgZ2xvYmFsQXR0cjMiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIldyb25nIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIGFubm90YXRpb25zLiIsIDEsIGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBhbm5vdGF0aW9uIGZvciBnbG9iYWxBdHRyMzoiLAotCQkiUEFTUyEgRG9jdW1lbnRhdGlvbiBmb3IgcmVzb2x2ZWQgYXR0cmlidXRlIHJlZiB3aGVuIHRoZSBhdHRyaWJ1dGUgcmVmIGhhcyBhbiBhbm5vdGF0aW9uIGJ1dCBkb2VzIG5vdCBoYXZlIGRvY3VtZW50YXRpb24iLAotCQkoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdGVzdEdsb2JhbEF0dHI0RG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJnbG9iYWxBdHRyNCIpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGdsb2JhbEF0dHIxIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJEb2N1bWVudGF0aW9uIGVsZW1lbnQgbm90IHJldHVybmVkIGZvciBnbG9iYWxBdHRyNCIpOwotCQl9Ci0JCWFzc2VydE51bGwoImdsb2JhbEF0dHI0IHJldHVybmVkIGRhdGEgd2hlbiBub24gZXhwZWN0ZWQuIiwgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MzIyODQxCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJhc2U2NEJpbmFyeURlZmF1bHRWYWx1ZSgpCi0JewotCSAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYU0RDb3JlVGVzdHNQbHVnaW4uUExVR0lOX0lEKTsKLQkgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYmFzZTY0QmluYXJ5L1Rlc3QueHNkIik7IC8vJE5PTi1OTFMtMSQKLQotCSAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCSAgYXNzZXJ0Tm90TnVsbChjbURvY3VtZW50KTsKLQotCSAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0KLQkgIENNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uID0gKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLmdldE5hbWVkSXRlbSgiVGVzdCIpOyAvLyROT04tTkxTLTEkCi0JICBhc3NlcnROb3ROdWxsKGNtRWxlbWVudERlY2xhcmF0aW9uKTsKLQotCSAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGNtRWxlbWVudERlY2xhcmF0aW9uLmdldERhdGFUeXBlKCk7Ci0JICBhc3NlcnROb3ROdWxsKGRhdGFUeXBlKTsKLQotCSAgU3RyaW5nIGltcGxpZWRWYWx1ZSA9IGRhdGFUeXBlLmdlbmVyYXRlSW5zdGFuY2VWYWx1ZSgpOwotCSAgYXNzZXJ0RXF1YWxzKCJNQT09IiwgaW1wbGllZFZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCX0gIAkJCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvWFNEQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9YU0RDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3NGNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9YU0RDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgLy8gVGhlIHBsdWctaW4gSUQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICAvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0gIHByaXZhdGUgc3RhdGljIFhTRENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLSAgLyoqCi0gICAqIFRoZSBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIFhTRENvcmVUZXN0c1BsdWdpbigpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHBsdWdpbiA9IG51bGw7Ci0gICAgcGx1Z2luQnVuZGxlID0gbnVsbDsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhTRENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzljZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsLkFsbFhTRENvcmVUZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRFdoaXRlc3BhY2UueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0RXaGl0ZXNwYWNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2NDkxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRFdoaXRlc3BhY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2RUZXN0IiAvPgotCTwhLS0gRGVmaW5lIGEgc2ltcGxlIHR5cGUgdG8gdGVzdCB0aGF0IHRoZSBoaWVyYXJjaHkgb3ZlcnJpZGluZyB3aGl0ZXNwYWNlIHJ1bGUgaXMgb2JzZXJ2ZWQgLS0+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbGxhcHNlZFN0cmluZyI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTwhLS0gRGVmaW5lIGEgc2ltcGxlIHR5cGUgdG8gdGVzdCB0aGF0IHRoZSB3aGl0ZXNwYWNlIHJ1bGUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGFuY2VzdG9yIC0tPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOb3JtYWxpemVkIj4KLSAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpub3JtYWxpemVkU3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ4c2RUZXN0Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgYmUgcmVwbGFjZWQgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2ltcGxlLXJlcGxhY2UiIHR5cGU9InhzZDpub3JtYWxpemVkU3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImludGVnZXItY29sbGFwc2UiIHR5cGU9InhzZDpub25OZWdhdGl2ZUludGVnZXIiIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InRva2VuLWNvbGxhcHNlIiB0eXBlPSJ4c2Q6dG9rZW4iIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGJlIHByZXNlcnZlZCAtLT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJpbmctcHJlc2VydmUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImR1cmF0aW9uLWNvbGxhcHNlIiB0eXBlPSJ4c2Q6ZHVyYXRpb24iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZXh0ZW5kZWQtY29sbGFwc2UiIHR5cGU9IkNvbGxhcHNlZFN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJleHRlbmRlZC1yZXBsYWNlIiB0eXBlPSJOb3JtYWxpemVkIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNJVHlwZVRlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0lUeXBlVGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mzk2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0lUeXBlVGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdYTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05ld1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlQSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJyZXF1aXJlZCI+Ci0JCQk8c2ltcGxlVHlwZT4KLQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJYIj48L2VudW1lcmF0aW9uPgotCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQk8L3NpbXBsZVR5cGU+Ci0JCTwvYXR0cmlidXRlPgotCTwvY29tcGxleFR5cGU+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9InR5cGVCIj4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlQyI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOnR5cGVBIj4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlRCI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOnR5cGVCIj4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JPGVsZW1lbnQgbmFtZT0iZWxlbWVudEEiIHR5cGU9InRuczp0eXBlQSI+PC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9ImVsZW1lbnRCIiB0eXBlPSJ0bnM6dHlwZUIiPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9iYXNlNjRCaW5hcnkvVGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2Jhc2U2NEJpbmFyeS9UZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2NmI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2Jhc2U2NEJpbmFyeS9UZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGVzdCIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGVzdCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdCIgdHlwZT0iYmFzZTY0QmluYXJ5IiAvPgotICAgIAotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL1Rlc3RBdHRyaWJ1dGVSZWZzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9UZXN0QXR0cmlidXRlUmVmcy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzIwYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL1Rlc3RBdHRyaWJ1dGVSZWZzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib2JqZWN0IiB0eXBlPSJvYmplY3QiPjwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJvYmplY3QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHIxIiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCVBBU1MhIERvY3VtZW50YXRpb24gZm9yIGF0dHJpYnV0ZSByZWYgb3ZlcnJpZGVzIHRoZSByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIGRvY3VtZW50YXRpb24KLQkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJUEFTUyEgTXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50cy4KLQkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHIyIiB1c2U9InJlcXVpcmVkIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iZ2xvYmFsQXR0cjMiIHVzZT0icmVxdWlyZWQiPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHI0IiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+PC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCTwveHNkOmFubm90YXRpb24+Ci0JCTwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCSAgICAgICBQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGZvciBsb2NhbCBhdHRyaWJ1dGUgcGFydCAxCi0JCSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJICAgICAgIFBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDIKLQkJICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ2xvYmFsQXR0cjEiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJRkFJTEVEISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmLiAgSWYgdGhpcyBkb2Mgc2hvd3MsIGl0J3MgYSBidWcuCi0JCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0iW2EtekEtWjAtOV9dKyI+PC94c2Q6cGF0dGVybj4KLQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpzaW1wbGVUeXBlPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyMiIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgZG9lcyBub3QgaGF2ZSBkb2N1bWVudGF0aW9uCi0JCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyMyIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgaGFzIGFuIGFubm90YXRpb24gYnV0IGRvZXMgbm90IGhhdmUgZG9jdW1lbnRhdGlvbgotCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDphdHRyaWJ1dGU+Ci0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ2xvYmFsQXR0cjQiIHR5cGU9InhzZDpzdHJpbmciPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJRkFJTEVEISBEb2N1bWVudGF0aW9uIGZvciBhdHRyaWJ1dGUgcmVmIGlzIGVtcHR5LiAgVGhpcyBkb2N1bWVudGF0aW9uIHNob3VsZCBub3QgZGlzcGxheS4KLQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL2dsb2JhbHJlZnRlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL2dsb2JhbHJlZnRlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGY4Njc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9nbG9iYWxyZWZ0ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMTU3MjU0IC0gVGVzdCBmaWxlIGZvciBkb2N1bWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAtLT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9nbG9iYWxyZWZ0ZXN0IiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9nbG9iYWxyZWZ0ZXN0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9InJvb3RUZXN0IiB0eXBlPSJUZXN0VHlwZSIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoaXMgc29tZSBnbG9iYWwgZG9jdW1lbnRhdGlvbjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6ZWxlbWVudD4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0idGVzdEVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciPgotICAgIAk8eHNkOmFubm90YXRpb24+Ci0gICAgCQk8eHNkOmRvY3VtZW50YXRpb24+U29tZSBtb3JlIHRlc3Rpbmc8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIAk8L3hzZDphbm5vdGF0aW9uPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUZXN0VHlwZSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgIAkJPHhzZDplbGVtZW50IHJlZj0idGVzdEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4KLSAgICAJCQk8eHNkOmFubm90YXRpb24+Ci0gICAgCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGlzIGlzIGFuIG92ZXJyaWRlPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAJCQk8L3hzZDphbm5vdGF0aW9uPgotICAgIAkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0QXR0cmlidXRlIiB0eXBlPSJBdHRyaWJ1dGVUZXN0VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+ICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVRlc3RUeXBlIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdEF0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCQk8eHNkOmFwcGluZm8vPgotICAgIAkJPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAJPC94c2Q6YXR0cmlidXRlPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0QXRXaXRoRG9jIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCQk8eHNkOmRvY3VtZW50YXRpb24+QXR0cmlidXRlIERvY3VtZW50YXRpb248L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIAkJPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAJPC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2FmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxzaW1wbGVUeXBlIG5hbWU9Im51bWJlcnNUeXBlIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iMiIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSIzIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjQiLz4KLQkJPC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0JPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyc1R5cGUiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iYSIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJiIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImMiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZCIvPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQk8c2ltcGxlVHlwZSBuYW1lPSJ1bmlvblR5cGUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzVHlwZSB0bnM6bnVtYmVyc1R5cGUgdG5zOnVuaW9uMlR5cGUiIC8+Ci0JPC9zaW1wbGVUeXBlPgotCTxlbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InRuczp1bmlvblR5cGUiPjwvZWxlbWVudD4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJudW1iZXJzMlR5cGUiPgotICAgIAk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iNCIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSI1Ii8+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9IjYiLz4KLSAgICAJPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyczJUeXBlIj4KLSAgICAJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9ImQiLz4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZSIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSJmIi8+Ci0gICAgCTwvcmVzdHJpY3Rpb24+Ci0gICAgPC9zaW1wbGVUeXBlPgotICAgIDxzaW1wbGVUeXBlIG5hbWU9InVuaW9uMlR5cGUiPgotICAgIAk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzMlR5cGUgdG5zOm51bWJlcnMyVHlwZSIvPjwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhYTE3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTAwZjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotI1dlZCBKdWwgMjMgMTE6MTk6MTMgRURUIDIwMDgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0NGIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgSnVsIDIyIDEyOjEzOjUxIEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OWU1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhzZHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLkFjdGl2YXRvcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi40LjAsMy4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDU2ZDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHhzZHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IHhzZHVpdGVzdHMuamFyCi1zb3VyY2UueHNkdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQueHNkdWl0ZXN0cy5qYXIgPSBiaW4vCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGM0NmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYU0QgVUkgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzA4MWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvLyBUaGUgcGx1Zy1pbiBJRAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cyI7Ci0gIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gIC8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWN0aXZhdG9yKCkKLSAgewotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ci0gICAqICkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gdGhpczsKLSAgICBwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ci0gICAqICkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBwbHVnaW4gPSBudWxsOwotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0FsbFhTRFVJVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQWxsWFNEVUlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJmYjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQWxsWFNEVUlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFdyYXBwZXIgdGVzdCBzdWl0ZSBmb3IgYWxsIFhTRCBVSSB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFhTRFVJVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhTRFVJVGVzdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhTRFVJVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFhTRFVJVGVzdHMiKTsKLSAgICAvLyBYU0QgSW5jbHVkZXMgdGVzdHMKLSAgICBhZGRUZXN0KENoYW1lbGVvbkluY2x1ZGVzVGVzdC5zdWl0ZSgpKTsKLSAgICAvLyBUZXN0aW5nIHVzZWQgaW1wb3J0cyBhcmVuJ3QgcmVtb3ZlZCAoZW5zdXJlIGxvZ2ljIHRvIGRldGVybWluZQotICAgIC8vIHdoYXQgaXMgb3Igd2hhdCBpcyBub3QgdXNlZCBpcyBjb3JyZWN0KQotICAgIGFkZFRlc3QoSW1wb3J0c1Rlc3Quc3VpdGUoKSk7Ci0gICAgLy8gVW51c2VkIFhTRCBpbXBvcnRzIHRlc3RzCi0gICAgYWRkVGVzdChYU0RVbnVzZWRUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyBYU0QgeG1sIG5zIHRhYmxlIGNsZWFudXAKLSAgICBhZGRUZXN0KFhTRFhNTE5TQ2xlYW51cFRlc3RzLnN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzNGIzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24udXRpbC5YU0REaXJlY3RpdmVzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gQWN0aXZhdG9yLmdldEluc3RhbGxVUkwoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTT1VSQ0VTX0ZPTERFUiA9ICJ0ZXN0cmVzb3VyY2VzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQ19ST09UX0ZPTERFUiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgIi8iICsgUkVTT1VSQ0VTX0ZPTERFUiArICIvWFNEIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgWFNERGlyZWN0aXZlc01hbmFnZXIgaW1wb3J0TWFuYWdlciA9IG5ldyBYU0REaXJlY3RpdmVzTWFuYWdlcigpOwotCi0gIHB1YmxpYyBCYXNlVGVzdENhc2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgQmFzZVRlc3RDYXNlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShTdHJpbmcgcGF0aCkKLSAgewotICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShwYXRoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICBYU0RSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoWFNEUmVzb3VyY2VJbXBsKSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSByZXNvdXJjZS5nZXRTY2hlbWEoKTsKLSAgICBhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0gICAgcmV0dXJuIHNjaGVtYTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9DaGFtZWxlb25JbmNsdWRlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZDE4ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9DaGFtZWxlb25JbmNsdWRlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBDaGFtZWxlb25JbmNsdWRlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDIwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvSW1wb3J0c1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvSW1wb3J0c1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllMzNiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0ltcG9ydHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0c1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoSW1wb3J0c1Rlc3QuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEVW51c2VkVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEVW51c2VkVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDk0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFVudXNlZFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBYU0RVbnVzZWRUZXN0cyBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RVbnVzZWRUZXN0cy5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1NpbXBsZS9UZXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIkltcG9ydDAwMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxUmVwZWF0UmVtb3ZhbE9uY2UoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvU2ltcGxlL1Rlc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiSW1wb3J0MDAxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICAKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxUmVwZWF0UmVtb3ZhbFR3aWNlKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1NpbXBsZS9UZXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIkltcG9ydDAwMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgCi0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICAgIAotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDMueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSA1KTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg0KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQ0LnhzZCIuZXF1YWxzKGQ0LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkNS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDYueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDcueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDliLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDljLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDMpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDUpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9BLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNS54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0KLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkNC5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ1ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoNCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDUuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5Zy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAzKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTUueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaXJjdWxhckluY2x1ZGVzMDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNC54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2lyY3VsYXJJbmNsdWRlczAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gNik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ0ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMyk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTQueHNkIi5lcXVhbHMoZDQuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDQpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU1LnhzZCIuZXF1YWxzKGQ1LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDYgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg1KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNi54c2QiLmVxdWFscyhkNi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0KLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RYTUxOU0NsZWFudXBUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RYTUxOU0NsZWFudXBUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGM0NzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEWE1MTlNDbGVhbnVwVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFhTRFhNTE5TQ2xlYW51cFRlc3RzIGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhTRFhNTE5TQ2xlYW51cFRlc3RzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTQpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLQotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSA2KTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAxNCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDYiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDgiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDkiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0KLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA2IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA3IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA5IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEwIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEyIikpOwotCi0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDYoKQotICB7Ci0gICAgLy8gTnVsbCB0YXJnZXQgbmFtZXNwYWNlIHNjaGVtYQotCi0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIC8vIFRoaXMgd2FzIGFkZGVkIHNpbmNlIHJlZmVyZW5jZXMgd2VyZSBtYWRlIHdpdGhvdXQgYSBwcmVmaXgKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA3KCkKLSAgewotICAgIC8vIFRlc3QgVW51c2VkIE51bGwgUHJlZml4Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA4KCkKLSAgewotICAgIC8vIFRlc3QgVXNlZCBOdWxsIFByZWZpeAotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyMjQ3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbC5BbGxYU0RVSVRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmJmYzJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI5MjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cmlidXRlIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTZjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjJkYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5ZDI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJJbXBBdHRyR3IxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5YTFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2UyODI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDIiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzY5ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwZmUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QyIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZmVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTg0MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDJhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcENUMSI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1NDc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyMjc0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkNjViZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMmI1YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTRkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2IwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZTQzZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNjQ4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NWQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzQ5MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzBmYTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmFhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTU2ZDljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0ieHNkOmRhdGUiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZjNTI3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDp1bnNpZ25lZEJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjkzMTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9InhzZDpib29sZWFuIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyYWE1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmMmEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpsYW5ndWFnZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmODZhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6ZG91YmxlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxM2Y2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODdlMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc4Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg1NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzg0NjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmU4ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjE2MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTUzZTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmN2ExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDkwNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9IkltcFNUMSB4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YzBiMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUgSW1wU1QxIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3ZjQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL0ltcG9ydDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjlmY2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWFiZDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyaWJ1dGUiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjcxYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9ImltcDpJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTY3YWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNmZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJpbXA6SW1wQXR0ckdyMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2VkODU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwZmU5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMiI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGYwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQk8L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmVhZjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMmRmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDIiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4ODQ3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4Yzg3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJpbXA6SW1wQ1QxIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyZWZkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1R5cGUxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iaW1wOkltcENUMiI+Ci0gICAgCQkgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZWIyNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9ImltcDpJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMGQ1ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iaW1wOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2NjNGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iaW1wOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzZDNmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlZjZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMGY0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMTYxN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcDpJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MzU1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcDpJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRjZGE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVlNjJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZjdiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iaW1wOkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDg2OGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbXA6SW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkNzA3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6ZGF0ZSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkNDhiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnVuc2lnbmVkQnl0ZSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM2YmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0JPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY3MTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZTM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmxhbmd1YWdlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYjNiYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmRvdWJsZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg0MjZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWRkZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTExNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTExNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5MTBjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTg0YTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjNDAyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9ImltcDpJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDg3NjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGJjNDE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDNjMzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3ODQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iaW1wOkltcFNUMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM5Mjk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJpbXA6SW1wU1QxIHhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZWZmNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIGltcDpJbXBTVDEiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlMjMxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJpbXA6SW1wU1QxIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZWVlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyOTI1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cmlidXRlIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE2YzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYyZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOWQyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJJbXBBdHRyR3IxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOWExYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNlMjgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDIiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc2OWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMGZlMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QyIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2ZlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2U4NDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2QyYTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcENUMSI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NTQ3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjI3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDY1YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJiNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU0ZDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTdiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmU0M2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjY0ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTVkN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc0OTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwZmE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJhYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1NmQ5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0ieHNkOmRhdGUiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NmUwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDp1bnNpZ25lZEJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5MzE3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9InhzZDpib29sZWFuIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmFhNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjJhMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpsYW5ndWFnZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjg2YWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6ZG91YmxlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTNmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg3ZTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhkOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3ODM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU4NTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4NDY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZlOGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGIxNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1M2U2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjdhMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5MDRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9IkltcFNUMSB4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGMwYjMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUgSW1wU1QxIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxN2Y0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jMUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMUF0dHIxIiB0eXBlPSJ0bnM6SW5jMVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMxQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzFFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGUzLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jMkdyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMkF0dHIxIiB0eXBlPSJ0bnM6SW5jMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMyQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTAyMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU0LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jM0dyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jM0F0dHIxIiB0eXBlPSJ0bnM6SW5jM1NUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMzQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzNFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTA5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU1LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQkKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNEF0dHIxIiB0eXBlPSJ0bnM6SW5jNFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM0QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzRFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTdhYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU2LnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNUF0dHIxIiB0eXBlPSJ0bnM6SW5jNVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM1QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzVFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzAzM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLTwhLS0gCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gLS0+Ci0gICAJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlMi54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzZBdHRyMSIgdHlwZT0idG5zOkluYzZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08IS0tICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9IlExOkltcENUMSI+PC94c2Q6ZWxlbWVudD4tLT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmZDMyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTgyYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTYueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDEzMTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiIAotCXhtbG5zOnRucz0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wMUVsZW1lbnQiIHR5cGU9InRuczpjdDAxIiAvPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjYzZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTJiZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiIHhtbG5zOnRucz0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAzIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbXAzRWxlbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0idG5zOmN0MDMiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL1Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvVGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYTU2N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvVGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IiB4bWxuczp0bnM9Imh0dHA6Ly93c2RsVGVzdCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiCi0JCXNjaGVtYUxvY2F0aW9uPSJJbXBvcnQwMDEueHNkIiAvPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIKLQkJc2NoZW1hTG9jYXRpb249IkltcG9ydDAwMi54c2QiIC8+Ci0JPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IgotCQlzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MDAzLnhzZCIgLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uMSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbnB1dDEiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6aW50IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0iaW1wOmN0MDMiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uMVJlc3BvbnNlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dHB1dDEiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXA6Y3QwMiIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJhNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wMkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXAyR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXAyQXR0cjEiIHR5cGU9InRuczpJbXAyU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDJBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wMkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDJTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wMlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wMkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNWQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0NC54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAzQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkltcDNHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDNBdHRyMSIgdHlwZT0idG5zOkltcDNTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wM0F0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbXAzRWxlbTEiIHR5cGU9IlExOkltcDRDVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wM1NUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAzU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAzQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDUxOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0My54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDRDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wNEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wNEF0dHIxIiB0eXBlPSJ0bnM6SW1wNFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXA0QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDRFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA0U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDRTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDRDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNEVsZW0yIiB0eXBlPSJRMTpJbXAzQ1QyIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjBlODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NSIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0Ni54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA1Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDVHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDVBdHRyMSIgdHlwZT0idG5zOkltcDVTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA1RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA1U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA1Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDVFbGVtMiIgdHlwZT0iUTE6SW1wNkNUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDE1ZWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDZBdHRyMSIgdHlwZT0idG5zOkltcDZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA2RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNlNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA2U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA2Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDZFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzFHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzFBdHRyMSIgdHlwZT0idG5zOkluYzFTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMxRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlMy54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzJHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzJBdHRyMSIgdHlwZT0idG5zOkluYzJTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMkF0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTAyMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNC54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzNHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzNBdHRyMSIgdHlwZT0idG5zOkluYzNTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jM0F0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMzRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTliMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzRBdHRyMSIgdHlwZT0idG5zOkluYzRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmMzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzVHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzVBdHRyMSIgdHlwZT0idG5zOkluYzVTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM1RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmQ0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNkF0dHIxIiB0eXBlPSJ0bnM6SW5jNlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM2QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzZFbGVtMSIgdHlwZT0iUTE6SW1wQ1QxIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWE5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyYThiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZGQzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YmNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2VhZTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLSAgICB4bWxuczppbXA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0Mi54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQ0LnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOWQzMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjJhNjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ODljMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0gICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluOEF0dHJpYnV0ZSIgdHlwZT0idG5zOkluYzNTVDEiPjwvYXR0cmlidXRlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODZhNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmMzQ1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5YS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiMDkxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YWJmMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDljLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwYzIyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDljLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5YzMyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhM2VjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmVkYzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9BLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlnLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzFmYTdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jM0NUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDk3ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTUueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMkNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzFHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzFBdHRyMSIgdHlwZT0idG5zOkluYzFTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMxRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2NmIxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCByZWY9InRuczAxOk1haW5FbGVtMDAxIj48L2VsZW1lbnQ+Ci0JCQk8YW55PjwvYW55PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnMwMjpNYWluQ1QwMDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczAzOk1haW5DVDAwMSI+PC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTxzaW1wbGVDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzdHJpbmciPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8YXBwaW5mbz48L2FwcGluZm8+Ci0JCQkJPC9hbm5vdGF0aW9uPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InNob3J0Ij48L2F0dHJpYnV0ZT4KLQkJCQk8YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwNDpNYWluQXR0ckdyMDAxIj48L2F0dHJpYnV0ZUdyb3VwPgotCQkJCTxhbnlBdHRyaWJ1dGU+PC9hbnlBdHRyaWJ1dGU+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9zaW1wbGVDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwvZW51bWVyYXRpb24+Ci0JCTwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczA1Ok1haW5TVDAwMSI+PC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8bGlzdCBpdGVtVHlwZT0idG5zMDY6TWFpblNUMDAxIj48L2xpc3Q+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPGxpc3Q+Ci0JCQk8c2ltcGxlVHlwZT4KLQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0idG5zMDc6TWFpblNUMDAxIj48L3Jlc3RyaWN0aW9uPgotCQkJPC9zaW1wbGVUeXBlPgotCQk8L2xpc3Q+Ci0JPC9zaW1wbGVUeXBlPgotCi0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczA4Ok1haW5TVDAwMSB0bnMwOTpNYWluU1QwMDIiPjwvdW5pb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPGF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLQotCTxhdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0KLQk8YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTxhdHRyaWJ1dGUgcmVmPSJ0bnMxMDpNYWluQXR0cjAwMSI+PC9hdHRyaWJ1dGU+Ci0JPC9hdHRyaWJ1dGVHcm91cD4KLQotCTxhdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L2F0dHJpYnV0ZUdyb3VwPgotCi0JPGdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxncm91cCByZWY9InRuczExOk1haW5Hcm91cDAwMiI+PC9ncm91cD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnMxMjpNYWluRWxlbTAwMSI+PC9lbGVtZW50PgotCQotCTxncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ic3RyaW5nIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwvYXBwaW5mbz4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQk8L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9ncm91cD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMDM4Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ0bnMwMTpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj48L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMjpNYWluU1QwMDEiPjwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwMzpNYWluU1QwMDEgICAKLQkJdG5zMDQ6TWFpblNUMDAyICAgCi0JCXN0cmluZyAgCi0gICAgICAgIGludGVnZXIgICAgICAgICI+PC91bmlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODhiMDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA3PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDg9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnMwMjpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAzOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwNDpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczA1Ok1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczA2Ok1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczA3Ok1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwODpNYWluU1QwMDEgdG5zMDk6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczEwOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczExOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zMTI6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjZjBmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnMwMTpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwMTpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwMTpNYWluU1QwMDEgdG5zMDE6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczAxOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczAxOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczAxOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxMzkzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9Ik1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJNYWluU1QwMDEgTWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiYjJlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIAotICAgIHhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0iTWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9Ik1haW5TVDAwMSBNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0iTWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTNhY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zPSJodHRwOi8vVW51c2VkIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6TWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0idG5zOk1haW5TVDAwMSB0bnM6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczpNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJ0bnM6TWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1OTk0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxucz0iaHR0cDovL1VzZWQiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InRuczpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnM6TWFpblNUMDAxIHRuczpNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0idG5zOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczpNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPEltcEVsZW0xPjwvSW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzNzUzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXZhbGlkYXRleHNkdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLnZhbGlkYXRleHNkdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4Y2Q0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGZhYTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4c2R0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Y2ZlYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdmFsaWRhdGV4c2R0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzBhYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gWFNEIFZhbGlkYXRpb24gVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTgzZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQljb25maWd1cmF0aW9uID0gbnVsbDsKLQlzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlVHJ1ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLQkgIGFzc2VydFRydWUoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyB0byB0cnVlOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBzZXR0aW5nIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRmFsc2UoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgZmFsc2UpOwotCSAgYXNzZXJ0RmFsc2UoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgdG8gZmFsc2U6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIsIGZhbHNlKTsKLQkgIGZhaWwoIlNldHRpbmcgYSBub24gZXhpc3RhbnQgZmVhdHVyZSBkaWQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uLiIpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICAvLyBUaGUgdGVzdCBzdWNjZWVkcyBpZiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGdldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIpOwotCSAgZmFpbCgiR2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjhiNDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEEgdGVzdCBjbGFzcyBmb3IgdGhlIFZhbGlkYXRvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yV3JhcHBlcigpOwotCSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gInM0cy1lbHQtY2hhcmFjdGVyIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiczRzLWVsdC1jaGFyYWN0ZXIiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UyID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTIsIG1lc3NhZ2UyKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHM0cy1lbHQtY2hhcmFjdGVyLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVEVYVC4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJURVhUIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzNHMtZWx0LWNoYXJhY3Rlci4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIiIsIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotCQotICAgIC8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgdGhyZWUgYXR0cmlidXRlcyB3aGVuIHRoZSBrZXkgaXMgc2V0IHRvICJzcmMtcmVzb2x2ZSIuCi0JVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCInTXlOYW1lJyIsIDEsIDEsICIiLCAic3JjLXJlc29sdmUiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UzID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTMsIG1lc3NhZ2UzKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHNyYy1yZXNvbHZlLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBzZXQgdG8gTXlOYW1lIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzcmMtcmVzb2x2ZS4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIk15TmFtZSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKSk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhOTVmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZyB0aGUgVmFsaWRhdG9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFZhbGlkYXRvciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI2FkZEluZm9Ub01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZSwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpIAotICB7Ci0Jc3VwZXIuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2ZWIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IGNhc2UgdG8gdGVzdCB0aGUgWFNETWVzc2FnZUluZm9IZWxwZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBYU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIgaGVscGVyID0gbmV3IFhTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCAiIn0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhpc3RhbnRLZXlBbmROdWxsTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbygiTk9OX0VYSVNUQU5UX0tFWSIsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydEVxdWFscygiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgIiJ9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEtleUFuZE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8obnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIG1ldGhvZCBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMuIFRoZXJlIGFyZSBhIGZldyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGEgc2ltcGxlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMgJ25hbWUnIHJldHVybnMgbmFtZS4KLSAgICogMi4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggbm8gc2luZ2xlIHF1b3RlcyByZXR1cm5zIG51bGwuCi0gICAqIDMuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIHNpbmdsZSBxdW90ZSAnbmFtZSByZXR1cm5zIG51bGwuCi0gICAqIDQuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIDMgc2luZ2xlIHF1b3RlcyAnbmFtZSduYW1lMicgcmV0dXJucyBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcygpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSBzaW1wbGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAnbmFtZScgcmV0dXJucyBuYW1lLgotCVN0cmluZyByZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ1wiLiIsICJuYW1lIiwgcmVzdWx0KTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBubyBzaW5nbGUgcXVvdGVzIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCJuYW1lIik7Ci0JYXNzZXJ0TnVsbCgiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IG51bGwgZm9yIHRoZSBzdHJpbmcgXCJuYW1lXCIgd2l0aCBubyBzaW5nbGUgcXVvdGVzLiIsIHJlc3VsdCk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc2luZ2xlIHF1b3RlICduYW1lIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSIpOwotCWFzc2VydE51bGwoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBudWxsIGZvciB0aGUgc3RyaW5nIFwiJ25hbWVcIiB3aXRoIG9uZSBzaW5nbGUgcXVvdGUuIiwgcmVzdWx0KTsKLQkKLQkvLyA0LiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCAzIHNpbmdsZSBxdW90ZXMgJ25hbWUnbmFtZTInIHJldHVybnMgbmFtZS4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSduYW1lMiciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ25hbWUyJ1wiIHdpdGggMyBzaW5nbGUgcXVvdGVzLiIsICJuYW1lIiwgcmVzdWx0KTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDI5NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyBmb3IgdGhlIFhTRE1lc3NhZ2VJbmZvSGVscGVyIGNsYXNzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyIGV4dGVuZHMgWFNETWVzc2FnZUluZm9IZWxwZXIgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRE1lc3NhZ2VJbmZvSGVscGVyI2dldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoU3RyaW5nIHMpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTc0NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgdGhlIEVjbGlwc2Ugc3BlY2lmaWMgWFNEIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRvIGVuc3VyZSB0aGUgVVJJIHJlc29sdmVyIGlzIG5vdCBudWxsIGluIHRoZSBFY2xpcHNlCi0gICAqIHNwZWNpZmljIFhTRCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VVJJUmVzb2x2ZXJJc1JlZ2lzdGVyZWQoKQotICB7Ci0JWFNEVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgWFNEVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDdlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgWFNEIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBYU0RWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYU0RWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaXJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWFNEVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhMWU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNEVmFsaWRhdG9yVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYU0QgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEVGVzdHMiKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjZDYxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIjsKLSAgcHJpdmF0ZSBYU0RWYWxpZGF0b3IgdmFsaWRhdG9yID0gWFNEVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgCi0gICAqIAkJVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIAotICAgKiAJCVRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiAKLSAgICogCQlUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiAKLSAgICogCQlUaGUgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgdmFsaWRhdGlvbiB0ZXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24sIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gIHsKLSAgICBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh0ZXN0ZmlsZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY3JlYXRlTG9nKGxvZ2xvY2F0aW9uLCB2YWxyZXBvcnQpOwotICAgICAgU3RyaW5nIGdlbmVyYXRlZExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGxvZ2xvY2F0aW9uKTsKLSAgICAgIFN0cmluZyBpZGVhbExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGlkZWFsbG9nbG9jYXRpb24pOwotICAgICAgYXNzZXJ0RXF1YWxzKGlkZWFsTG9nLCBnZW5lcmF0ZWRMb2cpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIkNvdWxkIG5vdCBjb21wYXJlIGxvZyBmaWxlcyIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGZpbGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlmIHN1Y2Nlc3NmdWwuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uIFRocm93biBpZiB1bmFibGUgdG8gY3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGFpb24gb2YgdGhlIGZpbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdGcm9tRmlsZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0KQotICB7Ci0gICAgIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChtZXNzYWdlICsgIiBbIiArIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBudW1lcnJvcnMrKzsKLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgaWYobnVtd2FybmluZ3MgPiAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuIik7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgIGlmKG51bWVycm9ycyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBpZihudW13YXJuaW5ncyA+IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCh3YXJuaW5nc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgCi0gICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGxvZ2ZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICBGaWxlIHBhcmVudCA9IGxvZ2ZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAJaWYgKCFwYXJlbnQuZXhpc3RzKCkpIAotICAJewotICAJICBwYXJlbnQubWtkaXJzKCk7Ci0gIAl9Ci0gICAgICBpZihsb2dmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBsb2dmaWxlLmRlbGV0ZSgpOwotICAgICAgfQotICAgICAgbG9nZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgICAKLSAgICAgIG91dFN0cmVhbSA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lLCB0cnVlKSk7Ci0gICAgICBvdXRTdHJlYW0ud3JpdGVCeXRlcyhsb2cudG9TdHJpbmcoKSk7Ci0gICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGxvZyB0aGVuIGNsZWFyIHRoZSBsb2cuCi0gICAgICBsb2cuZGVsZXRlKDAsIGxvZy5sZW5ndGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBsb2cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0UGx1Z2luTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gUExVR0lOX05BTUU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcykKLSAgewotICAgIHJldHVybiBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3RlZE1lc3NhZ2VzLCAwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzLCBpbnQgZGVwdGgpCi0gIHsKLSAgICBpZihuZXN0ZWRNZXNzYWdlcyAhPSBudWxsICYmIG5lc3RlZE1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSAiIjsKLSAgICAgIEl0ZXJhdG9yIG5lc3RlZE1lc0l0ZXIgPSBuZXN0ZWRNZXNzYWdlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUobmVzdGVkTWVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIG5lc3ZhbG1lcyA9IChWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZ1tdIGZpbGVzKQotICB7Ci0gICAgZmluYWwgSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gICAgZmluYWwgSVByb2plY3QgcHJvamVjdCA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0JICB7Ci0gICAgICAgIHByb2plY3QuY3JlYXRlKG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotCSAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3QgY3JlYXRlIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0gICAgICB9IAotICAgIH0KLSAgICBpZighcHJvamVjdC5pc09wZW4oKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5vcGVuKG51bGwpOwotCSAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3Qgb3BlbiBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArIGUpOwotCSAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUHJvamVjdERlc2NyaXB0aW9uIHByb2plY3REZXNjcmlwdGlvbiA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsgCi0gICAgICBwcm9qZWN0RGVzY3JpcHRpb24uc2V0TmFtZShwcm9qZWN0TmFtZSk7Ci0gICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKHByb2plY3REZXNjcmlwdGlvbiwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgcHJvamVjdCBwcm9wZXJ0aWVzIGZvciBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArICIuICIgKyBlKTsKLSAgICB9Ci0KLSAgICBpZihmaWxlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBudW1maWxlcyA9IGZpbGVzLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1maWxlczsgaSsrKQotICAgICAgewotICAgICAgICB0cnkKLQkJewotICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVzW2ldOwotICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg1KTsKLQkJCXdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgIElGaWxlIGlGaWxlID0gcHJvamVjdC5nZXRGaWxlKGZpbGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBpZighaUZpbGUuZXhpc3RzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaUZpbGUuY3JlYXRlKGluLCB0cnVlLCBudWxsKTsKLSAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgICAgfQotCQl9Ci0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlICIgKyBmaWxlc1tpXSk7Ci0JCX0gCi0gICAgICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2plY3QucmVmcmVzaExvY2FsKC0xLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAge30KLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiYjMyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciwgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBidWcgMTQ3MDMzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotCi0KLQotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgQlVHRklYRVNfRElSID0gIkJ1Z0ZpeGVzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9FbXB0eS54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIGNyZWF0ZVNpbXBsZVByb2plY3QoIlByb2plY3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGV9KTsKLSAgICAKLSAgICAKLSAgICBJQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICBJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ3MgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotCXsKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nID0gbmV4dENhdGFsb2dzW2ldOwotCQlpZihYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRC5lcXVhbHMobmV4dENhdGFsb2cuZ2V0SWQoKSkpewotCQkJSUNhdGFsb2cgdXNlckNhdGFsb2cgPSBuZXh0Q2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotCQkJaWYodXNlckNhdGFsb2cgIT0gbnVsbCkKLQkJCXsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGNhdGFsb2dFbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KXVzZXJDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRLZXkoInRlc3RLZXkiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJodHRwOi8vdGVzdHVyaSIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QiLypGSUxFX1BST1RPQ09MICsgZmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkqLywgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfSAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRJbnZhbGlkTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHdvT3BlbkJyYWNrZXRzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUd29PcGVuQnJhY2tldHMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImRvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMsIHRydWUpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byB0cnVlOiAiICsgZSk7Ci0gICAgfQotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uLCBjb25maWd1cmF0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2ciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIAotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkIiwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QKLSAgICogYnVnIDE0NzAzMwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEZ1bGxDb25mb3JtYW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRnVsbENvbmZvcm1hbmNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJGdWxsQ29uZm9ybWFuY2UvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkZ1bGxDb25mb3JtYW5jZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJGdWxsQ29uZm9ybWFuY2UvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uRlVMTF9TQ0hFTUFfQ09ORk9STUFOQ0UsIHRydWUpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBGVUxMX1NDSEVNQV9DT05GT1JNQU5DRSBmZWF0dXJlIHRvIHRydWU6ICIgKyBlKTsKLSAgICB9Ci0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhYWVjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgdGVzdCB2YXJpb3VzIHR5cGVzIG9mIHZhcmlhdGlvbnMgaW4gZmlsZSBwYXRocy4KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioqKioqKioqKioqKioqKioKLSAgICogVGVzdCBJbXBvcnRzCi0gICAqKioqKioqKioqKioqKioqKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldHRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFBlcmlvZEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE0YTc1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoaXMgdGVzdCBwbHVnaW4uCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlOwotCi0gIHB1YmxpYyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4oKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdGFydChjb250ZXh0KTsKLQlwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXBsdWdpbkJ1bmRsZSA9IG51bGw7Ci0Jc3VwZXIuc3RvcChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIHVybCBvZiB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRlYzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIgLz4KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWFNEVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0NzhhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyDQotDQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1yY2FzZS1SZWN1cnNlLjI6IFRoZXJlIGlzIG5vdCBhIGNvbXBsZXRlIGZ1bmN0aW9uYWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBwYXJ0aWNsZXMuIFszNSwgNDNdDQotZGVyaXZhdGlvbi1vay1yZXN0cmljdGlvbi41LjQuMjogRXJyb3IgZm9yIHR5cGUgJ1Jlc3RyaWN0ZWRGb28nLiAgVGhlIHBhcnRpY2xlIG9mIHRoZSB0eXBlIGlzIG5vdCBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIHRoZSBwYXJ0aWNsZSBvZiB0aGUgYmFzZS4gWzM1LCA0M10NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZmY2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjaGVtYV9yZWZlcmVuY2UuNDogRmFpbGVkIHRvIHJlYWQgc2NoZW1hIGRvY3VtZW50ICdzdWJkaXIvaW1wb3J0aW5nLnhzZGEnLCBiZWNhdXNlIDEpIGNvdWxkIG5vdCBmaW5kIHRoZSBkb2N1bWVudDsgMikgdGhlIGRvY3VtZW50IGNvdWxkIG5vdCBiZSByZWFkOyAzKSB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCBpcyBub3QgPHhzZDpzY2hlbWE+LiBbMywgOThdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE2NjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICdzdHJpbmdhJy4gSXQgd2FzIGRldGVjdGVkIHRoYXQgJ3N0cmluZ2EnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnLCBidXQgY29tcG9uZW50cyBmcm9tIHRoaXMgbmFtZXNwYWNlIGFyZSBub3QgcmVmZXJlbmNlYWJsZSBmcm9tIHNjaGVtYSBkb2N1bWVudCAncGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3N0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3BsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkJy4gWzMsIDUwXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZmIwMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTI1XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjMzOTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBtYXJrdXAgaW4gdGhlIGRvY3VtZW50IHByZWNlZGluZyB0aGUgcm9vdCBlbGVtZW50IG11c3QgYmUgd2VsbC1mb3JtZWQuIFsxLCAyXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMWE5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVsZW1lbnQgdHlwZSAiY29tcGxleFR5cGUiIG11c3QgYmUgZm9sbG93ZWQgYnkgZWl0aGVyIGF0dHJpYnV0ZSBzcGVjaWZpY2F0aW9ucywgIj4iIG9yICIvPiIuIFs2LCAzXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlM2FjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWVjMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzFhMzhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTRhMGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxZTIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OTgyMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NjllN2QuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTBmZGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0YzQxNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2MTE3NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1NzQwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWY4MzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTg0YzguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWQ3NTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg0ZDhhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkZjUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4OWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxDQotDQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlJTdFSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQ0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhNzVlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIwMDA5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDE4NWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiMDU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsQ29uZm9ybWFuY2UvRnVsbENvbmZvcm1hbmNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2MWM2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi0gICAgeG1sbnM6Zm9vPSJ1cm46Zm9vIgotICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOmZvbyIKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICB2ZXJzaW9uPSIxLjAiPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRm9vIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIgotICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICBuYW1lPSJGb28iIC8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiCi0gICAgICAgICAgICAgICAgbWluT2NjdXJzPSIxIgotICAgICAgICAgICAgICAgIG5hbWU9ImJhciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDEiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAyIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiYXIwMyIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZEZvbyI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImZvbzpGb28iPgotICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iRm9vIiAvPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJhciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAxIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAyIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAzIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYzgxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkhlYWQiPjwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMTNkMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgPgotCi0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVGFpbCI+PC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzRjNjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0FEb2ciCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0FEb2ciCi0JeG1sbnM6cHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciPgotCQotCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIKLQkJc2NoZW1hTG9jYXRpb249IlBhcnQxLnhzZCI+Ci0JPC9pbXBvcnQ+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIgotCQlzY2hlbWFMb2NhdGlvbj0iUGFydDIueHNkIj4KLQk8L2ltcG9ydD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJEb2dUeXBlIj4KLQkJPHNlcXVlbmNlPgotCi0JCQk8ZWxlbWVudCBuYW1lPSJUYWlsIiB0eXBlPSJwcmVmOlRhaWwiPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9IkJvZHkiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJhRG9nIiB0eXBlPSJ0bnM6RG9nVHlwZSI+PC9lbGVtZW50PgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjgzNDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgc2NoZW1hTG9jYXRpb249InN1YmRpci9pbXBvcnRpbmcueHNkYSIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzIwZmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJDLnhzZCIvPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0IiPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9BQyIgc2NoZW1hTG9jYXRpb249Ii5cQy54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2FtcGxlVHlwZSI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZUVsZW1lbnQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTZhZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290Ij4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHNjaGVtYUxvY2F0aW9uPSJzdWJkaXIvaW1wb3J0aW5nLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZjU0NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9pbXBvcnRpbmcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgeG1sbnM6c2ltcGxlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSIgc2NoZW1hTG9jYXRpb249InNpbXBsZS54c2QiLz4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJteVNpbXBsZVR5cGUiPgotICAgIDxsaXN0IGl0ZW1UeXBlPSJzdHJpbmciLz4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MTBhNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9zaW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiIHhtbG5zOmlibT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiPgotICAgIDxlbGVtZW50IG5hbWU9Im15RWxlbWVudCIgdHlwZT0ic3RyaW5nIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0NDMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ludmFsaWQiIHhtbG5zOmludmFsaWQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW52YWxpZCI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nYSI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkNzYzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3YzhmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIj4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlMjRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSI+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iUHVibGljYXRpb25UeXBlIgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+CQkJCi0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIwIi8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvcmVzdHJpY3Rpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiIGFic3RyYWN0PSJ0cnVlIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJDYXRhbG9ndWUiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJjOlB1YmxpY2F0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGYxNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDg0ZTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDgyYzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YmQwZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmQ5YTc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTgwNTEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkNsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwZDA2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTI1MDNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk2NDhjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2hJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMmRhOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzNGQ4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzMzRhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODlmZjMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzOTBjNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzMDUyOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmRkOTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTI1MTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NjFkZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNjdlOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249Ik9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYWI3MzguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OTc4MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyM2FiMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlBlcmlvZEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzYyNTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOTdkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDc0OTZjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmODNjODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZmIzNGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NmNmRlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTI3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5M2QyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjMGJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNmJhMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA5ODUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlOWE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk2M2Q0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzgxMTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGVJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZGExNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjE2ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyNzdhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzQyNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+Cg==